C # ActiveDirectory Групповые запросы LDAP

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

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

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

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

Какие-либо предложения?


person Community    schedule 24.08.2009    source источник


Ответы (1)


Да, "обычный" 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» - см. Подробности о том, как все это сделать, в отличном сообщении в блоге Райана Данна: Перечисление групп токенов (tokenGroups) в .NET.

Марк

person marc_s    schedule 24.08.2009
comment
Метод tokenGroups работал безупречно. К сожалению, у нас нет версии 3.5, поэтому я не могу попробовать новый метод, но ссылка, которую вы дали для настройки tokenGroups, отлично сработала. Спасибо. - person ; 24.08.2009