ASP .NET MVC 4 AuthorizeAttribute和ActiveDirectoryMembershipProvider

时间:2013-06-24 12:34:41

标签: asp.net asp.net-mvc-4

我正在尝试使用AuthorizeAttribute在我的ASP.NET MVC 4 Intranet Web应用程序中实现基于Active Directory角色的授权。

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

这应该只允许组CONTOSO \ G_Helpdesk的成员能够查看索引页面。我的开发虚拟机和Web服务器都是 NOT域成员。所以我认为我应该配置一个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是否甚至使用成员资格提供程序?我认为完全无视它。

1 个答案:

答案 0 :(得分:3)

我发现我没有想出正确的方向。在使用Windows身份验证时,我无法使用AD凭据从独立的Web服务器进行身份验证。 Source

我有两个选择。

  • 使域名的网络服务器成员。
  • 使用表单身份验证。

我希望这个答案可以挽救那些在同一时间遇到同样问题的人。