PrincipalOperationException

PrincipalOperationException

我在自定义Active Directory RoleProvider中创建了以下方法:

public override string[] GetRolesForUser(string username)
{
    ArrayList results = new ArrayList();
    using (var principalContext = new PrincipalContext(
             ContextType.Domain, null, domainContainer))
    {
        var user = UserPrincipal.FindByIdentity(
             principalContext, IdentityType.SamAccountName, username);
        foreach (string acceptibleGroup in GroupsToInclude)
        {
            GroupPrincipal adGroup = GroupPrincipal.FindByIdentity(
                 principalContext, acceptibleGroup);
            if (user.IsMemberOf(adGroup))
                results.Add(acceptibleGroup);
        }
    }
    return results.ToArray(typeof(string)) as string[];
}


它仅对照我的应用程序中使用的角色白名单进行检查。问题是,如果用户不是其中一个角色的成员,则当

if (user.IsMemberOf(adGroup))


行被执行。我希望如果用户不在组中,则只会返回`false。这是怎么了?

编辑:
另外,如果我调用PrincipalOperationException并尝试遍历结果,则会得到COMException-指定的目录服务属性或值不存在。

最佳答案

Principal.IsMemberOf()user.GetAuthorizationGroups()都使用tokenGroups属性来确定组成员身份。

您需要确保将用于运行程序的帐户添加到Builtin\Windows Authorization Access Group,以便访问tokenGroups属性。

有关更多详细信息,请参见此MSDN KB

关于c# - Active Directory RoleProvider-Principal.IsMemberOf抛出PrincipalOperationException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11558587/

10-10 05:52