Я видел несколько вопросов, похожих на мои, но ни один из них на самом деле не применим.Проблема, с которой я сталкиваюсь:
Мне нужно получить членство в группе пользователя с:
- Группа в домене 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 (включая переполнение стека), но безрезультатно.