这是我第一次在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用户登录?
答案 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");