ASP.NET 成员资格 - 使用哪个 RoleProvider 以便 User.IsInRole() 检查 ActiveDirectory 组?

Posted

技术标签:

【中文标题】ASP.NET 成员资格 - 使用哪个 RoleProvider 以便 User.IsInRole() 检查 ActiveDirectory 组?【英文标题】:ASP.NET Membership - Which RoleProvider to use so User.IsInRole() checks ActiveDirectory Groups? 【发布时间】:2010-10-26 04:08:36 【问题描述】:

其实很简单的问题:

我目前禁用了 IIS 匿名访问,用户使用 Windows 登录名自动登录。但是调用 User.IsInRole("Role name") 返回 false。我仔细检查了 User.Identity.Name() 和“角色名称”,它应该返回 true。

我目前在我的 Web.Config 中有这个:

更新 我打电话给 User.IsInRole("Role name") 我应该打电话给 User.IsInRole("DOMAIN\Role name")

但是我仍然想知道是否需要 条目?

我应该改变什么? (需要 条目吗?

  <authentication mode="Windows">
      <forms
      name=".ADAuthCookie"
      timeout="10" />
  </authentication>


<membership defaultProvider="ADMembershipProvider">
  <providers>
    <clear/>
      <add
         name="ADMembershipProvider"
         type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
         connectionStringName="ADConnectionString"
         connectionUsername="XXX\specialAdUser"
         connectionPassword="xx"
         />
  </providers>
</membership>

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

【问题讨论】:

【参考方案1】:

如果您使用 Windows 身份验证,IsInRole 无需额外配置即可工作,只要您记得为角色添加域前缀,即 DOMAIN\groupName。

此外,您可以扮演自己的角色(双关语),并针对例如 SQL 角色提供程序使用 Windows 身份验证,您不希望您的 AD 为您的应用程序添加自定义角色。

所以不,您根本不需要提供程序配置。

【讨论】:

【参考方案2】:

这里的会员资格提供者不会提供帮助。 ActiveDirectoryMembershipProvider 似乎最适合(仅?)适合 Forms 身份验证。

【讨论】:

【参考方案3】:

BlogEngine.NET 有一个Active Directory role provider。

【讨论】:

【参考方案4】:

非常确定您唯一需要的就是 roleManager 组(以及基本身份验证模式='windows' 设置)

【讨论】:

是否已经在 Activedirectory 中自动检查了角色?【参考方案5】:

开箱即用,没有直接使用 Active Directory 的角色提供程序。您可以使用 ASP.NET 成员资格和角色系统中的角色表,也可以使用授权管理器 (AzMan)。

CodeProject 上有一篇文章,它展示了一个针对 Active Directory 的角色提供程序的实现 - 带有完整的源代码。也许这有帮助?

马克

【讨论】:

以上是关于ASP.NET 成员资格 - 使用哪个 RoleProvider 以便 User.IsInRole() 检查 ActiveDirectory 组?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET:对 ASP.NET 成员资格提供程序的完全控制

实体框架代码优先和 ASP.NET 成员资格

oAuth ASP.NET 成员资格提供程序

如何为 ASP.NET MVC 2 创建自定义成员资格提供程序?

membership与成员资格

使用成员资格提供程序的 ASP.NET MVC 4 Web API 身份验证