繁体   English   中英

ASP.NET Active Directory角色提供程序

[英]ASP.NET Active Directory role provider

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

到目前为止,我已经有一个网站正在运行,并且无法使用活动目录用户登录。

我的问题是:我无法触发“ Roles.IsUserInRole”。 就像它甚至没有注意登录用户的组成员身份。

我一直在寻找解决方案,但是唯一可以找到的解决方案是编写我自己的成员资格提供程序。 这真的必要吗?

我想控制用户可以使用其成员身份访问的内容。 就像用户位于AD的“学生”安全组中一样,他们只能访问ASP.NET解决方案中学生文件夹中的页面。

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

这是我的角色管理器的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");
            }
        }

奖励问题:我只能通过广告中“用户”容器中的用户登录。 为什么我不能从某个级别的OU登录用户?

关于第一个问题,您是否已经尝试过将组名和域名一起使用,例如Roles.IsUserInRole(@"DOMAIN\\groupName")

至于第二个问题。 我假设您使用ActiveDirectoryMembershipProvider 如果是这样,我认为您的web.config中有一个连接字符串(供提供者使用),并且此连接字符串指定提供者应使用Users容器。 但是,您不必指定具体的容器(有关详细信息,请参见本网站 )。 例如,代替:

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

您可以使用:

LDAP://testdomain.test.com

从您的描述中,您似乎正在使用带有ActiveDirectoryMembershipProvider表单身份验证进行身份验证。

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

确保删除:

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

那么您也可以使用:

User.IsInRole("Students");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM