簡體   English   中英

Intranet站點的ASP.NET身份+ Windows身份驗證

[英]ASP.NET Identity + Windows Authentication for Intranet Site

我正在構建一個Intranet站點,其中用戶將在公司域上並具有不同的權限級別。 我目前正在使用<authentication mode="Windows"/>來控制站點訪問,但似乎我應該使用ASP.NET身份

例如,假設我的應用程序是組織中每個部門的儀表板。 我想創建一個名為DashboardUsers AD組,並將每個可以觸及該組中的站點的人放入。

我還想限制儀表板中的視圖。 例如,我只希望IT小組看到他們的觀點,財務人員看到他們的觀點等。

問題 - 我應該使用Windows身份驗證來控制對站點的訪問,然后使用ASP.NET身份進行用戶級權限嗎?

我只使用WindowsAuthentication做了類似的事情。 您可以使用授權屬性標記您的操作:

[Authorize(Roles = @"DashboardUsers")]

只要此用戶是DashboardUsers AD組的成員,他們就可以訪問此操作。 它看起來像MVC魔術,但它真的很簡單。

不幸的是,這種方法不允許您為不同的角色重載動作,因為授權屬性不是方法簽名的一部分。 在您的視圖中,您必須根據當前用戶角色顯示不同的錨標記。

即:

[Authorize(Roles = @"DashboardUsers\Manager")]
public ActionResult IndexManagers()
{
..
}

要么

[Authorize(Roles = @"DashboardUsers\Finance")]
public ActionResult IndexFinance()
{
..
}

編輯后編輯:由於您的身份來自AD,您可以在控制器中使用邏輯,如:

if(User.IsInRole("Finance"))
{
..
}
else if(User.IsInRole("IT"))
{
..
}

這將檢查他們屬於哪個AD組。 我知道它不是很優雅,但我無法想象將Windows Auth與自定義標識混合在一起,並且在您自己的數據庫中管理權限也會很優雅。

我之前遇到過這種困境,並且創建了一個與Windows身份驗證結合使用的自定義角色提供程序。 在對AD進行身份驗證時,我不確定您是否需要OWIN中間件。

public class MyAwesomeRoleProvider : RoleProvider
{
    public override void AddUsersToRoles(string[] usernames, string[] roleNames)
    {
        // i talk to my database via entityframework in here to add a user to a role.
    }

    // override all the methods for your own role provider
}

配置文件

<system.web>
    <authentication mode="Windows" />
    <roleManager enabled="true" defaultProvider="MyAwesomeRoleManager">
      <providers>
        <clear />
        <add name="MyAwesomeRoleManager" type="MyAwesomeNamespace.MyAwesomeRoleProvider" connectionStringName="MyAwesomeContext" applicationName="MyAwesomeApplication" />
      </providers>
    </roleManager>
</system.web>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM