获取Active Directory中的用户组

Mua*_*Dib 6 c# asp.net wpf web-services active-directory

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

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

我遇到的问题是,来自不同Trusted AD林的用户(具有完全双向信任)尝试登录时,我无法从我的ASP.NET Web服务与之通信的AD服务器中获取他的组列表.ASP.NET Web服务只能访问AD服务器(AD Main),而不能访问信任AD控制器(AD Secondary).

用户是(AD辅助)域的成员,我可以针对(AD Main)域对该用户进行身份验证,但是当用户位于(AD Main)域时,我无法从(AD Main)域获取组列表(AD Secondary)域名.

我试过这段代码.

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; }
Run Code Online (Sandbox Code Playgroud)

我试图从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);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

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

Kod*_*dra 1

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

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

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