Междоменное членство в группе активных каталогов - PullRequest
1 голос
/ 10 февраля 2012

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

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

  • Группа в домене B
  • Пользователь в домене A.
  • Служба в домене B.
  • Двустороннее доверие от Forrest to Forrest.

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

Чтобы получить членство в группе, я использую объект 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 (включая переполнение стека), но безрезультатно.

1 Ответ

5 голосов
/ 10 февраля 2012

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

...