Как получить доступ к группам пользователя в родительском домене?

Я работаю в случае, когда есть два домена AD Dom1 и Dom2. Существует одностороннее доверие от Dom1 к Dom2, так что пользователи в Dom1 могут быть авторизованы в Dom2.

Мой код С# делает это просто отлично.

Однако в Dom2, когда я пытаюсь получить группы пользователей от пользователя в Dom1, я ничего не получаю. Я получаю список групп от пользователей, которые существуют в Dom2.

            _DE.Path = "LDAP://RootDSE";
        string szDomain = (string)_DE.Properties["defaultNamingContext"][0];
        string obEntry = "LDAP://" + szDomain;
        SearchResult res = ADExists("UserPrincipalName=" + szUPN, "User");
        try
        {
            if (res != null)
            {
                _DE.Path = res.Path;
                //szUserDN = res.Path;
                if (_DE.Properties["memberOf"].Count > 1)
                {
                    object[] groups = (object[])_DE.Properties["memberOf"].Value;
                    if (groups != null)
                    {
                        foreach (object group in groups)
                        {
                            string szGroup = group.ToString();
                            DataRow drAdd = dtGroups.NewRow();
                            drAdd["GroupName"] = group;
                            dtGroups.Rows.Add(drAdd);
                        }
                    }
                }

person Zonus    schedule 27.02.2014    source источник


Ответы (1)


Вместо этого попробуйте использовать пространство имен System.DirectoryServices.AccountManagement:

static GroupPrincipal[] GetUserAuthorisationGroups(string userPrincipalName)
{
    using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
    using (UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.UserPrincipalName, userPrincipalName))
    {
        return user.GetAuthorizationGroups().OfType<GroupPrincipal>().ToArray();
    }
}

Затем вы можете найти группы любым способом:

GroupPrincipal[] groups = GetUserAuthorisationGroups(szUPN);

bool searchBySid = groups.Any(g => g.Sid == groupSid);
bool searchByDN = groups.Any(g => g.DistinguishedName == groupDN);
bool searchByName = groups.Any(g => g.Name == groupName);
person Ashigore    schedule 27.02.2014
comment
Все еще есть проблема с поиском пользователя. Строка, которая кажется проблемой, - это использование (UserPrincipal user = UserPrincipal.FindByItentity......); - person Zonus; 28.02.2014
comment
@ScottJohnson Является ли szUPN фактическим полным именем участника-пользователя, так что [email protected] или каким-либо другим доменным именем DNS? - person Ashigore; 28.02.2014
comment
Да, это будет выглядеть как [email protected] - person Zonus; 28.02.2014
comment
Я могу авторизовать пользователя в одностороннем доверенном домене, но я не могу найти/получить доступ к пользователю, даже если я укажу местоположение пользователя... - person Zonus; 28.02.2014