Я ищу, чтобы получить список всех групп, в которых пользователь входит в Active Directory, как явно перечисленные в списке свойств memberOf, так и неявно через вложенное членство в группе. Например, если я рассматриваю UserA и UserA, является частью GroupA и GroupB, я также хочу указать GroupC, если GroupB является членом GroupC.
Чтобы дать вам немного больше информации о моем приложении, я буду делать это на ограниченной основе. В принципе, я хочу, чтобы проверка безопасности иногда указывала эти дополнительные членства. Я хочу различать два, но это не должно быть трудно.
Моя проблема в том, что я не нашел эффективного способа заставить этот запрос работать. Стандартный текст в Active Directory (Эта статья CodeProject) показывает способ сделать это, что в основном является рекурсивным поиском. Это кажется ужасно неэффективным. Даже в моем небольшом домене пользователь может иметь более 30 членов. Это означает, что 30+ звонков в Active Directory для одного пользователя.
Я просмотрел следующий код LDAP, чтобы сразу получить все элементы memberOf:
(memberOf:1.2.840.113556.1.4.1941:={0})
где {0} будет моим LDAP-контуром (например: CN = UserA, OU = Пользователи, DC = foo, DC = org). Однако он не возвращает никаких записей. Недостатком этого метода, даже если он работал, было бы то, что я не знаю, какая группа была явной и которая была неявной.
Вот что я до сих пор. Я хотел бы знать, есть ли лучший способ, чем статья CodeProject, и если да, то как это может быть выполнено (реальный код будет замечательным). Я использую .NET 4.0 и С#. Мой Active Directory находится на функциональном уровне Windows 2008 (пока он еще не R2).