在我们的系统中,我们以两种略有不同的方式从Active Directory读取用户安全组。在一种情况下,AD返回的组列表缺少域本地组。 GetAuthorizationGroups()的响应取决于所使用的PrincipalContext。在失败的场景中,GetAuthorizationGroups()将只返回全局组。结果是缺少来自AD的所有域本地组。任何人都可以解释为什么?从Active Directory读取用户授权组
失败溶液:
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "our.domain.net");
var userPrincipal = UserPrincipal.FindByIdentity(ctx, IdentityType.UserPrincipalName, "userB");
PrincipalSearchResult<Principal> groups = userPrincipal.GetAuthorizationGroups();
在这种情况下,处理由“用户A”执行。 “UserA”是域名“our.domain.net”的成员。 “UserA”与工作解决方案中特定用户的用户是完全相同的用户。 PrincipalContext应该因此与工作解决方案中的PrincipalContext相同。此解决方案中来自GetAuthorizationGroups()的响应未命中AD的域本地组。
工作液:
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "our.domain.net", "UserA", "PasswordA");
var userPrincipal = UserPrincipal.FindByIdentity(ctx, IdentityType.UserPrincipalName, "userB");
PrincipalSearchResult<Principal> groups = userPrincipal.GetAuthorizationGroups();
在这种情况下,主叫用户专门使用名称和密码创建主体上下文时确定。在这种情况下,AD将返回用户所属的所有组。这也是我希望从失败的解决方案中看到的行为。在某些情况下,我没有UserA的用户密码,因此无法使用工作解决方案。
请帮我理解为什么失败的解决方案不会返回用户所属的所有组。
你有多个域名吗?你在什么操作系统上?它可能与UAC有关。我会尝试关闭UAC并重试(请记住在关闭UAC后重新启动计算机)。仅供参考,ValidateCredentials()不帮助你做GetAuthorizationGroups()以防你认为它确实如此。 – 2011-01-02 04:16:30