Не удается заставить приложение .NET получать доступ к группам AD в разных доменах.

У меня есть приложение .NET, распространяемое через ClickOnce. Безопасность внутри приложения реализована через метод WindowsPrincipal.IsInRole(GroupName) с использованием набора групп в качестве ресурсов. Эта структура хорошо работает для нас для пользователей в том же домене, что и группы. К сожалению, теперь у нас есть пользователи, которым необходимо использовать приложение, работающее на машинах и использующее учетные записи пользователей в другом домене, которому доверяет наш домен, но который не находится в том же лесу.

Кажется, что IsInRole() запрашивает билет AD на локальном компьютере для членства в группе. К сожалению, этот билет содержит только локальные группы домена для домена машины, а также глобальные и универсальные группы других доверенных доменов, наши группы являются локальными группами домена в первом домене. Ситуация с ловушкой-22 возникает из-за того, что AD не допускает внешних субъектов безопасности ни в глобальных, ни в универсальных группах, и поэтому, хотя пользователи второго домена могут запрашивать ее, они не могут быть ее членами (что делает ее немного бессмысленной! )

Объясню: есть два домена: DOM1 и DOM2 с настройкой доверия между ними, но они не находятся в одном лесу.

DOM1\User1
DOM2\User2  

два пользователя.

Я хотел бы поместить User1 и User2 в одну группу, которая видна обоим пользователям и может содержать их обоих.

Единственный способ, который я могу в настоящее время увидеть, это следующий (где {} обозначает членов групп, DL = локальный домен и GLO = глобальная группа.)

Создайте две глобальные группы по одной в каждом домене:

DOM1\GLOGroup1 : {DOM1\User1}  
DOM2\GLOGroup1 : {DOM2\User2}

и две локальные группы домена, содержащие две глобальные группы:

DOM1\DLGroup1 : {DOM1\GLOGroup1, DOM2\GLOGroup1}  
DOM2\DLGroup1 : {DOM1\GLOGroup1, DOM2\GLOGroup1}

Но на самом деле это неприемлемо, так как на самом деле у нас есть более двух доменов и около 70 групп для администрирования, включая иерархию групп, и у нас нет большого прямого контроля над администрированием групп в других доменах.

Мы еще не обдумывали подход с использованием LDAP, но из того немногого, что я прочитал, я полагаю, что это обычно не рекомендуется для этой цели?


person user38292    schedule 17.11.2008    source источник


Ответы (3)


вместо этого вы можете попробовать использовать LDAP, но вам нужно будет знать, к какому серверу LDAP обращаться; см. этот ответ для примера кода

person Steven A. Lowe    schedule 18.11.2008
comment
Думаю, вы будете проверять сервер глобального каталога. Как только Cross Forest Trust установлен, он должен работать... Я согласен с LDAP. - person Saif Khan; 18.11.2008

разве это не должна быть универсальная группа, позволяющая пользователям из нескольких доверенных доменов?

Учетная запись пользователя, с которой вы проверяете объявление, также должна иметь возможность читать каждую группу объявлений ou.

Мауро

person Mauro    schedule 17.11.2008
comment
Спасибо, Мауро, да, мы тоже попробовали универсальные группы, но они также не могут содержать участников внешней безопасности, что означает, что пользователи DOM2 не могут быть в группе. - person user38292; 17.11.2008

В документации указано (для перегрузки строки):

Роль может быть определена только для домена текущего принципала.

Но это не указано для перегрузки SecurityIdentifier. Так что, вероятно, это сработает (не проверял). Вы можете получить sid с помощью wmi. Примеров не найти.

person Igal Serban    schedule 17.11.2008
comment
Ваше здоровье. Перегрузка SecurityIdentifier, по-видимому, страдает от той же проблемы. - person user38292; 19.11.2008