Междоменное членство в группе активного каталога

Я видел несколько вопросов, похожих на мой, но ни один из них не подходил. Проблема, с которой я столкнулся:

Мне нужно получить членство в группе пользователя с:

  • Группа в домене B
  • Пользователь в домене A.
  • Услуга в домене Б.
  • От Форреста к Форресту двустороннее доверие.

Пользователь подключается к службе, и служба получает объект WindowsIdentity с идентификатором безопасности, именем и т. Д.

Чтобы получить членство в группе, я использую объект UserPrincipal. Для этого вам понадобится объект PrincipalContext. Конструктору объекта PrincipalContext требуется полное доменное имя домена (например, A.some.domain.com). Объект WindowsIdentity содержит имя домена NetBios в имени пользователя (например, A \ User), но я не вижу способа получить имя DNS.

Вот пример кода с DNS-именем HARD CODED, который работает, но мне нужно удалить жестко закодированную часть.

- WindowsIdentity wi (передается в метод) -

PrincipalContext context = new PrincipalContext(ContextType.Domain, "A.some.domain.com");
UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(context, IdentityType.Sid, wi.User.ToString());

У меня есть другое решение, которое использует олицетворение, используя System.DirectoryServices.ActiveDirectory.Domain.GetCurrentDomain (). Name, но это неприемлемо, потому что олицетворение может быть недоступно. Мне нужно решение, которое будет работать с TokenImpersonationLevel.Identification

Я потратил несколько дней на поиск в MSDN и Google (включая Stack Overflow), но безрезультатно.


person DCastenholz    schedule 10.02.2012    source источник


Ответы (1)


Использование WindowsIdentity.Groups не работает? Если DomainA \ User обращается к DomainB \ Service, токен пользователя должен включать группы из обоих доменов.

person Brian Desmond    schedule 10.02.2012
comment
Короткий ответ: это сработает. Просто потратил несколько часов на тестирование. У меня создалось впечатление, что группы, поступающие из свойства WindowsIdentity.Groups, могли быть устаревшими или неполными. Это правда, но похоже, что при обращении к сервису через границы домена токен всегда свежий. Хороший звонок. - person DCastenholz; 11.02.2012