9

其实很简单的问题:

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

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

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

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

我应该改变什么?(并且是否需要 <membership> 条目?

  <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>
4

5 回答 5

4

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

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

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

于 2009-05-24T20:05:45.680 回答
1

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

于 2009-05-22T19:18:15.167 回答
1

BlogEngine.NET 有一个Active Directory 角色提供者

于 2009-05-24T19:49:06.150 回答
0

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

于 2009-05-22T19:22:01.447 回答
0

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

有一篇关于CodeProject的文章显示了针对 Active Directory 工作的角色提供者的实现 - 带有完整的源代码。也许这有帮助?

马克

于 2009-05-24T17:13:56.450 回答