我在 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中)更改为以同一用户身份运行([电子邮件受保护] /cdn-cgi/l/email-protection) - 以下代码有效。
PrincipalContext context = new PrincipalContext(ContextType.Domain, null, "DC=MyCompany,DC=COM");
UserPrincipal p = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "joe.blogs");
var groups = p.GetAuthorizationGroups();
我需要让第一个示例中的代码正常工作 - 我不想只是为了让该代码正常工作而以域用户身份运行应用程序池。