gpt4 book ai didi

c# - 在 Active Directory 中获取用户组

转载 作者:太空狗 更新时间:2023-10-29 21:59:01 24 4
gpt4 key购买 nike

我在将我的 ASP.NET Web 服务与 Active Directory 设置集成并使用它来验证用户并检查他们所属的 AD 组以及他们是否有权使用我的自定义应用程序时遇到问题。

我的自定义应用程序有自己的权限,管理员配置允许使用自定义应用程序的 Active Directory 组。

我遇到的问题是,当来自不同受信任 AD 林的用户以完全双向信任尝试登录时,我无法从我的 ASP.NET Web 服务通信的 AD 服务器获取他的组列表和。 ASP.NET Web 服务只能访问 AD 服务器(AD Main),不能访问受信任的 AD Controller (AD Secondary)。

用户是 (AD Secondary) 域的成员,我可以针对 (AD Main) 域对该用户进行身份验证,但是当用户位于(AD 辅助)域中。

我试过这段代码。

StringCollection groupids = new StringCollection();
try
{
DirectoryLibrary dirLib = new DirectoryLibrary();
DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://" + domain,username, password);
if (directoryEntry != null)
{
//Enum the properties so we can see what is in them
foreach (string propname in directoryEntry.Properties.PropertyNames)
{
Debug.WriteLine(propname);
}

object obGroups = directoryEntry.Invoke("Groups");
foreach (object ob in (IEnumerable)obGroups)
{
// Create object for each group.
DirectoryEntry obGpEntry = new DirectoryEntry(ob);
groupids.Add(obGpEntry.NativeGuid);
}
}
}
catch (DirectoryServicesCOMException ex) { throw ex; }

我试图从 DirectoryEntry 对象转移到类似这样的东西。

List<GroupPrincipal> result = new List<GroupPrincipal>();
StringCollection groupids = new StringCollection();

PrincipalContext yourDomain = new PrincipalContext(ContextType.Domain, domain, userName, password);

// find your user
UserPrincipal user = UserPrincipal.FindByIdentity(yourDomain, userName);

// if found - grab its groups
if (user != null)
{
PrincipalSearchResult<Principal> groups = user.GetGroups();

// iterate over all groups
foreach (Principal p in groups)
{
// make sure to add only group principals
if (p is GroupPrincipal)
{
groupids.Add(p.DisplayName);
}
}

}

但是,我没有获得用户,也无法获得其他域中该用户的组列表。任何帮助将不胜感激。

最佳答案

这似乎是 AD 派生属性 memberOf 的一个很好的用例。使用 DirectoryEntry directoryEntry 对象,您可以枚举用户属于哪些组。

foreach (object group in directoryEntry.Properties["memberOf"])
{
DirectoryEntry obGpEntry = New DirectoryEntry("LDAP://" + (String)group);
groupids.Add(obGpEntry.NativeGuid);
}

如果您在 ob 前加上“LDAP://”前缀,您也可能会使用第一个代码段

关于c# - 在 Active Directory 中获取用户组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10081234/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com