3

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

[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 组成员的 Active Directory 用户登录。事实上,我根本无法登录。当我将属性更改为以下行时,我可以使用本地帐户登录。

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

AuthorizeAttribute 甚至使用成员资格提供程序吗?我认为它完全忽略了它。

4

1 回答 1

3

我发现我没有朝着正确的方向思考。在使用 Windows 身份验证时,我将无法使用 AD 凭据从独立网络服务器进行身份验证。来源

我有两个选择。

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

我希望这个答案能拯救那些在一段时间内遇到同样问题的人。

于 2013-06-26T10:19:21.377 回答