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 成员资格提供程序的完全控制