ASP.NET Active Directory角色提供程序

时间:2014-01-25 02:50:03

标签: c# asp.net active-directory

这是我第一次在Active Directory中使用ASP.NET角色成员身份。

到目前为止,我已经运行了一个网站,并且能够使用活动目录用户登录。

我的问题是:我无法触发“Roles.IsUserInRole”。就像它甚至看着登录用户的群组成员身份一样。

我一直在寻找解决方案,但我能找到的唯一解决方案是编写自己的会员提供商。这真的是必要的吗?

我想控制用户可以使用其会员资格访问的内容。 就像用户在AD中的“学生”安全组中一样,他们只能在我的ASP.NET解决方案中访问学生页面中的页面。

我正在使用表单身份验证。

以下是我的rolemanager的webconfig示例:

    <system.web>
  <roleManager defaultProvider="WindowsProvider"
               enabled="true"
               cacheRolesInCookie="false">
    <providers>
      <add
        name="WindowsProvider"
        type="System.Web.Security.WindowsTokenRoleProvider" />
    </providers>
  </roleManager>
</system.web>

在这里我正在尝试IsUserInRole

        protected void Login2_LoggingIn(object sender, LoginCancelEventArgs e)
        {
            if (Roles.IsUserInRole("Students"))
            {
            Response.Redirect("../Students/StartPage.aspx");
            }
        }

奖金问题:我只能通过AD中的“用户”容器登录用户。为什么我无法从某个级别的OU用户登录?

3 个答案:

答案 0 :(得分:1)

关于您的第一个问题,您是否已尝试将群组名称与域名Roles.IsUserInRole(@"DOMAIN\groupName")一起使用?

关于你的第二个问题。我假设您使用ActiveDirectoryMembershipProvider。如果是这样,我认为您的 web.config (由提供程序使用)中有一个连接字符串,此连接字符串指定提供程序应使用 Users 容器。但是,您不必指定具体的conatainer(有关详细信息,请参阅此site)。例如,而不是:

LDAP://testdomain.test.com/CN=Users,DC=testdomain,DC=test,DC=com

您可以使用:

LDAP://testdomain.test.com

答案 1 :(得分:1)

根据您的说明,您似乎正在使用带有ActiveDirectoryMembershipProvider的表单身份验证进行身份验证。

这与WindowsTokenRoleProvider不兼容。要使用基于Windows组成员身份公开角色的WindowsTokenRoleProvider,您需要使用Windows身份验证。

答案 2 :(得分:0)

确保删除:

 <authentication mode="Forms">....</authentication>

然后您可以使用:

User.IsInRole("Students");