簡體   English   中英

將.NET MVC應用程序中的User.Identity映射到活動目錄用戶

[英]Mapping User.Identity in .NET MVC app to active directory user

我正在編寫一個內部網上的.NET MVC 5應用程序,使用Windows身份驗證,需要查詢Active Directory以查看可用的組,然后檢查用戶是否在該角色中。

組和用戶名的來源將是活動目錄。 然后,我需要使用.NET Identity檢查身份和成員身份。 我不確定哪些字段映射到什么。

AD中感興趣的領域似乎是:

  • SamAccountName:我認為這是我從User.Identity獲得的用戶名,但是文檔說這個屬性是: 用於支持運行早期版本操作系統的客戶端和服務器的登錄名,例如Windows NT 4.0,Windows 95 ,Windows 98和LAN Manager。
  • CN:用戶姓名的可顯示版本
  • objectGUID:不會更改的用戶或組的標識符。 重要的是,如果用戶姓氏發生變化,用戶將更改其用戶名。

所以,我認為SamAccountName == User.Identity.Name ,但文檔說SamAccountName適用於早期的操作系統。 這是否有效意味着這已被棄用,我應該使用別的東西?

我的關於CN和objectGUID的斷言是否正確?

第一步:設置參數以使用AD:

在web.config文件的部分中,設置以下內容:

<authentication mode="Windows" />

<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
   <providers>
      <clear />
      <add 
          name="AspNetWindowsTokenRoleProvider"
          type="System.Web.Security.WindowsTokenRoleProvider" 
          applicationName="/" />
   </providers>
</roleManager>

現在,您將能夠直接使用System.Web.Security命名空間中的方法。

如果要將對View的訪問權限僅限於AD的“groupName”組的成員:

你只需要像這樣裝飾你的控制器動作:

[Authorize(Roles = @"DOMAIN\groupName")]
Public ActionResult Index()
{...}

如果您想根據AD用戶群進行治療:

在治療中使用“IsInRole(rolename)”等方法:

if (User.IsInRole("DOMAIN\\groupName"))
{
     // Do what you want
}

編輯:有問題的實現:在這里,您應該在創建任務時保存受影響的組的sAMAccountName。 然后,當用戶想要將任務標記為完成時,只需檢查:

if (User.IsInRole("DOMAIN\\" + sAMAccountNameOfTheGroupDedicatedToYourTask))
{
     // Mark as complete
}

暫無
暫無

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

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