gpt4 book ai didi

c# - Active Directory RoleProvider - Principal.IsMemberOf 抛出 PrincipalOperationException

转载 作者:行者123 更新时间:2023-11-30 21:05:41 27 4
gpt4 key购买 nike

我在自定义 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。这里出了什么问题?

编辑:另外,如果我调用 user.GetAuthorizationGroups() 并尝试遍历结果,我会收到 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com