Я борюсь с проблемой, когда я не смог найти бережливое и общее решение.Это моя ситуация:
Я нахожусь в огромном лесу AD с> 20 поддоменами, реплицирующимися на несколько сотен серверов.Скажем, основной домен и область Kerberos COMPANY.COM
, а я работаю в D1.COMPANY.COM
.Я подключаюсь из Java к глобальному каталогу и могу получить доступ ко всему forrest для поддержки всех пользователей компании.
URL-адрес моего подключения выглядит следующим образом: ldap://mycompany.com:3268/DC=company,DC=com
Весь материал работаетв веб-приложении с использованием SPNEGO для аутентификации пользователей, что работает очень хорошо.Т.е. после успешного входа в систему я получаю пользователей UPN / Kerberos.По некоторым причинам все поля UPN в лесу были изменены в соответствии с адресом электронной почты пользователя, а значение UPN осталось без изменений.Это означает, что я не могу выполнить поиск по принцу krb, но мне нужно удалить имя пользователя и выполнить поиск по sAMAccountName
.Я предположил, что sAMAccountName
является уникальным во всем лесу, пока пользователь не смог войти в систему вчера.После некоторой магии запроса LDAP я выяснил, что у двух пользователей одинаковые sAMAccountName
в двух разных доменах.Мой поиск не удался.
Итак, вопрос в том, как мне определить базовое DN / DC области / поддомена, основанной на области Kerberos?
Я разобрался с несколькими подходами с раздетымстрока области:
- составляет URL-адрес LDAP, подключается и читает defaultNamingContext
- , переформатирует имя домена в DC = d1, DC ...
В настоящее времяЯ использую подход 2, который кажется самым простым.Хотя некоторые сообщения C # о переполнении стека говорят, что это может произойти из-за непересекающихся пробелов.
Кто-нибудь знает о безопасном решении?На самом деле лучше всего было бы перевести принципалы Kerberos в имена пользователей.