我有一些代码可以检索用户所属的Active Directory组。在localhost上,它返回正确的结果,但是当部署到另一台计算机(同一网络上的Web服务器)时,它返回的结果要少得多。
我正在指定AD服务器以及管理员为访问而提供的特殊用户名和密码。
DirectoryEntry de = new DirectoryEntry("LDAP://***:389", "***", "***");
DirectorySearcher ds = new DirectorySearcher(de);
ds.Filter = "(&((&(objectCategory=Person)(objectClass=User)))(samaccountname=" + search + "))";
ds.SearchScope = SearchScope.Subtree;
ds.PropertiesToLoad.Add("*");
SearchResult rs = ds.FindOne();
if (rs != null)
{
if (rs.GetDirectoryEntry().Properties["memberof"].Value != null)
//rest of code removed
我也尝试了不同的方法,结果也不同......
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "***, "***", "***"))
{
UserPrincipal user = UserPrincipal.FindByIdentity(pc, name);
if (user != null)
{
List<string> groups = new List<string>();
PrincipalSearchResult<Principal> groups2 = user.GetAuthorizationGroups();
//rest of code removed
我原以为通过指定用户名和密码,结果应该是相同的。知道为什么会这样吗?
答案 0 :(得分:0)
这些是不同的,因为他们正在检索不同的数据集。 memberOf
属性是动态构建的,它将为您提供用户是/直接/成员的组。另一方面,GetAuthorizationGroups()
调用将为您提供用户可传递的所有安全组。它通过查看AD中的tokenGroups
属性来实现此目的。