在我的应用程序中,我使用以下方法将AD用户名传递给它(例如:Domain1 \ User1)并尝试在Active Directory中查找用户所属的组。
public ActionResult Login(string userName)
{
PrincipalContext up = new PrincipalContext(ContextType.Domain);
UserPrincipal users = UserPrincipal.FindByIdentity(up,IdentityType.SamAccountName, userName);
PrincipalSearchResult<Principal> groups = users.GetGroups();
IEnumerable<string> userGroupList = groups.Select(p =>p.SamAccountName);
return userGroupList ;
}
代码完美无缺,但我猜这个代码无法在有多个域的环境中工作。 例如: 1)用户尝试使用( Domain1 \ User1 )登录,它将通过, 2)用户尝试使用( Domain2 \ User2 )登录时,应用会尝试在 Domain1 中查找 User2 ,并且因为没有这样的Domain1中的用户将失败。
这是真的吗?如果是,我该如何解决此问题,以便它适用于多个域?
答案 0 :(得分:0)
在尝试实例化新的PrincipalContext对象时,我需要将域名作为第二个参数传递。 通过这样做,我能够检索具有多个域的用户组。 所以代码将是这样的:
PrincipalContext up = new PrincipalContext(ContextType.Domain,"DomainName");