2014-01-23 136 views
3

我正在編寫一個.NET MVC 5應用程序,它位於Intranet上,使用Windows身份驗證並需要查詢Active Directory以查看哪些組可用,然後檢查如果用戶在那個角色。將.NET MVC應用程序中的User.Identity映射到活動目錄用戶

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

在公元感興趣的領域似乎是:

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

所以,我覺得SAM帳戶== User.Identity.Name,但該文檔說SAM帳戶是較早版本的操作系統。這是否意味着這是否被棄用,我應該使用別的東西?

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

+0

您是否使用Windows身份驗證來獲取您的用戶身份? –

+0

是的。我會編輯我的問題來說明問題。 –

+0

您還可以添加使用AD組的目的嗎?例如是否限制頁面訪問? –

回答

3

第一步:設置參數來使用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命名空間中的方法。

如果你想限制訪問查看到只有「組名」組廣告的人成員:

你只需要裝飾一樣,你的控制器動作:

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

如果您要根據用戶的AD組做處理:

使用方法,如在治療「IsInRole(角色名)」:

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

編輯:執行有問題的:在這裏,你應該保存到影響你的任務,當你創建任務組的sAMAccountName賦。然後,當用戶想要將任務標記爲完成時,只需檢查:

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

我不會在編譯時知道組名。我正在查詢活動目錄以查看完整列表,然後用戶選擇一個將針對其新任務進行保存的項目。這就是爲什麼我想知道所有廣告字段的含義。什麼是SamAccountName,是什麼,當我使用User.IsInRole(x)? –

+0

嘗試使用Roles.GetRolesForUser()方法獲取列表(在完成前面描述的第一步之後)。它使用您指定的角色提供者,因此將使用AD。 http://msdn.microsoft.com/en-us/library/8ak75t41.aspx –

+0

如果您可以快速測試Roles.GetRolesForUser()。我還會查看一些舊的來源,我列出了羣組列表,以便在它無法正常工作時嘗試幫助您。 對不起,快速編輯,但你也可以提供你看到你的實施方式,一步一步?就像'顯示頁面=>用戶點擊任務以標記爲完成=>檢查...' –

相關問題