我在自定义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/