2013-06-24 160 views
3

我想通過使用AuthorizeAttribute在ASP.NET MVC 4 Intranet Web應用程序中實現基於Active Directory角色的授權。ASP .NET MVC 4 AuthorizeAttribute和ActiveDirectoryMembershipProvider

[Authorize(Roles = "CONTOSO\\G_Helpdesk")] 
public ActionResult Index() { 
    return View(); 
} 

這應該只允許組CONTOSO \ G_Helpdesk的會員才能查看索引頁面。我的開發虛擬機和Web服務器都是不是域成員。所以我想我應該配置一個ActiveDirectoryMembershipProvider。我的web.config如下所示。

<authentication mode="Windows"/> 
<authorization> 
    <deny users="?"/> 
</authorization> 

<membership defaultProvider="ADMembershipProvider"> 
    <providers> 
    <add name="ADMembershipProvider" 
     type="System.Web.Security.ActiveDirectoryMembershipProvider, 
     System.Web, Version=2.0.0.0, Culture=neutral, 
     PublicKeyToken=b03f5f7f11d50a3a" 
     connectionStringName="ADService" 
     connectionUsername="CONTOSO\User" 
     connectionPassword="myPassword" 
     attributeMapUsername="sAMAccountName"/> 
    </providers> 
</membership> 

<connectionStrings> 
    <add name="ADService" connectionString="LDAP://dc1/DC=CONTOSO,DC=com" /> 
</connectionStrings> 

現在是問題所在。我無法使用屬於CONTOSO \ G_Helpdesk組的成員的活動目錄用戶進行登錄。實際上我根本無法登錄。當我將屬性更改爲下面的行時,我可以使用本地帳戶登錄。

[Authorize] 
public ActionResult Index() { 
    return View(); 
} 

是否AuthorizeAttribute甚至使用會員的供應商?我認爲它完全忽略了它。

+0

我不認爲你需要'connectionUsername'中的'CONTOSO'部分,而不是隻使用用戶名。 – SOfanatic

+0

不幸的是,這是行不通的。我的猜測是會員提供商根本沒有使用。有什麼方法可以記錄/調試嗎? – Menno

回答

3

我發現我並沒有朝着正確的方向思考。使用Windows身份驗證時,我無法使用AD憑據從獨立的Web服務器進行身份驗證。 Source

我有兩個選擇。

  • 製作域的web服務器成員。
  • 使用表單身份驗證。

我希望這個答案能夠挽救那些在一段時間內同樣的問題中掙扎的人。