Получить членство в группе AD для текущего пользователя в другом домене - PullRequest
0 голосов
/ 02 мая 2018

У меня есть немного кода, чтобы получить все группы AD для пользователя, вошедшего в систему:

        PrincipalContext ctx = new PrincipalContext(ContextType.Domain, Environment.UserDomainName);

        // find a user
        UserPrincipal adUser = UserPrincipal.FindByIdentity(ctx, user);

        if (adUser == null)
        {
            Logger.Error("Could not find related Active Directory user");
            return;
        }
        GetUserDetailsFromGroupMembership(adUser.GetGroups().Select(g => g.Name));

Получит все группы, в которые входит текущий пользователь на своем зарегистрированном домене. Мое имя пользователя является частью домена "EUR", но у меня также есть членство в домене "USA". Как мне также запрашивать группы в других доменах?

1 Ответ

0 голосов
/ 02 мая 2018

GetGroups() получает все группы из доменов в одном лесу, поэтому я должен предположить, что два ваших домена не находятся в одном лесу, но доверяют друг другу.

Я не знаю, как сделать это с пространством имен AccountManagement, но так вы бы поступили с DirectorySearcher.

Когда учетные записи добавляются в группы на внешнем доверенном домене, они отображаются как объекты принципала внешней безопасности, которые содержат SID учетной записи. Вот что вам нужно искать. У вас уже есть учетная запись в переменной adUser, поэтому я использую adUser.Sid здесь.

Я предполагаю, что вы всегда будете искать другой домен, поэтому вы можете жестко закодировать distinguishedName другого домена в первой строке.

var otherDomainDN = "DC=usa,domain,DC=com";
var ds = new DirectorySearcher(new DirectoryEntry($"LDAP://{otherDomainDN}"),
    $"(&(objectClass=group)(member=CN={adUser.Sid},CN=ForeignSecurityPrincipals,{otherDomainDN}))");
ds.PropertiesToLoad.Add("cn");

var otherDomainGroups = new List<string>();
foreach (SearchResult g in ds.FindAll()) {
    otherDomainGroups.Add(g.Properties["cn"][0].ToString());
}

После этого otherDomainGroups будет список имен других групп.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...