【问题标题】:LDAP Authentication with memberOf使用 memberOf 的 LDAP 身份验证
【发布时间】:2025-11-30 09:40:01
【问题描述】:

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

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

我试过了:

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

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

是不是我做错了什么?

【问题讨论】:

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


    【解决方案1】:

    当您为用户创建 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】:

      您是否尝试过添加域名?

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

      编辑:

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

      【讨论】:

        【解决方案3】:

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

        我肯定会记录这一点,因为我继承了一个使用这种方法的系统,它让我费了好几个小时才弄清楚在哪里实施了访问控制。

        【讨论】: