[英]Security Integration between Windows Authentication Intranet and ASP.NET Identity MVC Website
[英]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.