gpt4 book ai didi

c# - UserPrincipal.GetAuthorizationGroups() 方法出错

转载 作者:太空狗 更新时间:2023-10-29 17:52:38 26 4
gpt4 key购买 nike

我在网络应用程序中使用 UserPrincipal 类的 GetAuthorizationGroups 方法时遇到问题。

使用以下代码,我收到“尝试检索授权组时,发生错误 (5)”

PrincipalContext context = new PrincipalContext(ContextType.Domain, null, "DC=MyCompany,DC=COM", "username", "password");
UserPrincipal p = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "joe.blogs");
var groups = p.GetAuthorizationGroups();

我相信这段代码在一定程度上有效。

  • 当我查看上下文对象时,我可以看到对象中的服务器和用户名/密码已正确解析
  • 当我查看 p 对象时,我可以看到 AD 详细信息已填充,例如电话号码等。

这是错误的堆栈跟踪。

[PrincipalOperationException: While trying to retrieve the authorization groups, an error (5) occurred.]
System.DirectoryServices.AccountManagement.AuthZSet..ctor(Byte[] userSid, NetCred credentials, ContextOptions contextOptions, String flatUserAuthority, StoreCtx userStoreCtx, Object userCtxBase) +317279
System.DirectoryServices.AccountManagement.ADStoreCtx.GetGroupsMemberOfAZ(Principal p) +441
System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroupsHelper() +78
System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroups() +11

通过从 PrincipalContext 构造函数中删除用户名和密码详细信息并将应用程序池(在 iis7 中)更改为以同一用户 (username@mycompany.com) 运行 - 以下代码有效。

PrincipalContext context = new PrincipalContext(ContextType.Domain, null, "DC=MyCompany,DC=COM");
UserPrincipal p = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "joe.blogs");
var groups = p.GetAuthorizationGroups();

我需要让第一个示例中的代码正常工作——我不想以域用户身份运行应用程序池只是为了让这段代码正常工作。

最佳答案

我遇到过同样的问题。参见类似问题的讨论。 https://stackoverflow.com/a/8347817/2012977

解决方法如下:

public List<GroupPrincipal> GetGroups(string userName)
{
var result = new List<GroupPrincipal>();
PrincipalContext ctx = GetContext(); /*function to get domain context*/
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, userName);
if (user != null)
{
PrincipalSearchResult<Principal> groups = user.GetAuthorizationGroups();

var iterGroup = groups.GetEnumerator();
using (iterGroup)
{
while (iterGroup.MoveNext())
{
try
{
Principal p = iterGroup.Current;
result.Add((GroupPrincipal) p);
}
catch (PrincipalOperationException)
{
continue;
}
}
}
}

return result;
}

关于c# - UserPrincipal.GetAuthorizationGroups() 方法出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3405646/

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