0

我需要一些帮助,我正在制作基于角色的菜单。我正在使用 LDAP Active Directory 登录。

我可以登录,但无法从 AD 组中获取角色。

我尝试使用角色提供程序,但无法使其正常工作。我使用以下方法获取组:

private ArrayList setRoles()
{
    ArrayList rolesList = new ArrayList();
    DirectoryEntry de = new DirectoryEntry("LDAP://**********");
    DirectorySearcher ds = new DirectorySearcher(de);
    ds.PropertiesToLoad.Add("memberOf");
    ds.SearchScope = SearchScope.Subtree;
    ds.Filter = "(sAMAccountName=test)"; // your username

    SearchResult result = ds.FindOne();

    foreach (string g in result.Properties["memberOf"])
        rolesList.Add(g);
    return rolesList;
}

现在,我需要在某处“设置”角色才能使用

User.IsInRole("Admin")

[Authorize role...]
public bla bla bla()

任何想法,链接等?

PD:我正在使用表单授权。

4

2 回答 2

2

您不必手动执行此操作。使用内置角色提供程序应该通过在 web.config 中进行设置来完成任务。

Active Directory 成员资格提供程序

Windows 令牌角色提供程序

更新:这是关于 StackOverflow 的一个问题,其中涉及使用 ActiveDirectory 成员资格提供程序进行设置,但仍使用表单身份验证。

ASP.NET MVC - 针对 Active Directory 对用户进行身份验证,但需要输入用户名和密码

于 2013-02-27T21:22:43.490 回答
1

我没有使用 AD 的经验,但是,您需要做的是使用具有角色的 Principal 设置 HttpContext 的 User 属性。

我之前创建的一种方法是创建一个继承自 AuthorizationAttribute 的自定义授权属性。

public class AuthorizeActiveDirectoryAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        var user = filterContext.HttpContext.User;

        //Your code to get the list of roles for the current user

        var formsIdentity = filterContext.HttpContext.User.Identity as FormsIdentity;
        filterContext.HttpContext.User = new System.Security.Principal.GenericPrincipal(formsIdentity, rolesList.ToArray());

        base.OnAuthorization(filterContext);
    }

}

然后,您将其应用于您的操作方法

[AuthorizeActiveDirectory role...]
public bla bla bla()

这也将允许您使用User.IsInRole("Admin")

于 2013-02-27T21:23:26.430 回答