使用memberOf进行LDAP身份验证

时间:2012-04-05 18:45:55

标签: c# asp.net active-directory ldap

我有一个asp.net(C#)设置为使用LDAP进行身份验证。一切正常,我可以登录我们目录中的任何用户。问题是,我需要将某些页面限制为特定组中的人员。我正在使用登录视图+帐户文件夹方法。

我的网站设计很简单,它有三个页面,一个可供所有人查看(帐户文件夹之外),另外两个需要身份验证。我希望一个组可以访问这两个网页,而第二个组只能访问其中一个页面。

我试过了:

String group = "group";
if (!User.IsInRole(group)) {
    Response.Redirect("login.aspx");
}

但无论我的用户不在该组中。我有一个LDAP浏览器,我知道我确实在群组中。 LDAP浏览器显示“memberOf”和“CN = group”。

我有什么问题吗?

3 个答案:

答案 0 :(得分:0)

您是否尝试过添加域名?

您也可以使用App.Config实现此功能:http://bytes.com/topic/asp-net/answers/300187-web-config-authorization-help

编辑:

Here是使用App.Config在ASP.NET中基于角色的安全性的更好链接。

答案 1 :(得分:0)

为用户创建FormsAuthenticationTicket时,UserData指定该用户的“角色”。

http://msdn.microsoft.com/en-us/library/system.web.security.formsauthenticationticket.aspx

仅举例:

FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1,
    username, DateTime.Now, DateTime.Now.AddMinutes(30),
    isPersist, "group");

//I'll add more example code for the sake of completing the example
string encryptTick = FormsAuthentication.Encrypt(authTicket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,
                encryptTick);
if (isPersist)
    cookie.Expires = authTicket.Expiration;
Response.Cookies.Add(cookie);

这应该允许上面的代码工作。

答案 2 :(得分:0)

如果您对域使用集成身份验证,并且已将模拟设置为true,则可以通过删除ASPNET(以及任何其他全局组)来获取对目录的权限来锁定应用程序的区域,并添加您希望有权访问的指定AD组。

我肯定会记录这一点,因为我继承了一个使用这种方法的系统,它让我绊倒了几个小时来确定执行访问控制的位置。