我在 Web 应用程序中使用 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();
我需要让第一个示例中的代码正常工作 - 我不希望以域用户身份运行应用程序池只是为了让此代码正常工作。