C # ActiveDirectory LDAP группы запросов - PullRequest
4 голосов
/ 24 августа 2009

По сути, я пытаюсь сделать следующее: у меня есть веб-приложение ASP.Net, использующее проверку подлинности с помощью форм с некоторым пользовательским кодом для привязки его к ActiveDirectory (очень похоже на то, как это работает).

Однако всякий раз, когда я запрашиваю контроллер домена для групп пользователей, он возвращает только те группы, в которых они явно находятся, а не подгруппы (т. Е. Есть определенная группа безопасности, к которой принадлежит пользователь, например группа А, то есть член группы, которую я хочу, скажем, группа B, пользователь явно находится в группе A, но только неявно в группе B, потому что группа A является членом группы B).

Я читал, что здесь могут помочь запросы tokenGroups, но в настоящее время у меня нет способа проанализировать эти данные.

Однако, что было бы наиболее предпочтительно, если бы я мог пропустить определенные группы с помощью запроса LDAP и заставить контроллер домена просто дать мне логическое значение (true / false), если этот пользователь находится в этой группе или нет.

Есть предложения?

1 Ответ

4 голосов
/ 24 августа 2009

Да, «обычный» user.Properties["memberOf"] возвращает только прямое членство.

Однако, если вы используете .NET 3.5, вы можете использовать более современные методы, основанные на принципах:

using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
    using(Principal p = Principal.FindByIdentity(ctx, "yourUserName"))
    {
        var groups = p.GetGroups();

        using (groups)
        {
            foreach (Principal group in groups)
            {
                Console.WriteLine(group.SamAccountName + "-" + group.DisplayName);
            }
        }
    }
}

Этот метод (добавьте ссылку на сборку «System.DirectoryServices.AccountManagement» в ваш проект) должен работать и доставлять основную группу пользователя, а также членство во вложенной группе.

Если вы работаете в .NET 2.0 / 3.0 и не можете двигаться вверх, лучше использовать подход, прочитав атрибут «tokenGroups» - подробности о том, как это сделать, можно найти в отличном блоге Райана Данна. post, Перечисление групп токенов (tokenGroups) в .NET .

Марк

...