У меня есть веб-приложение, в котором используются некоторые серверные серверы (UNC, HTTP и SQL). Чтобы это заработало, мне нужно настроить ServicePrincipalNames для учетной записи, на которой запущен пул приложений IIS, а затем разрешить делегирование Kerberos внутренним службам.
Я знаю, как настроить это на вкладке «Делегирование» в инструменте «Пользователи и компьютеры AD».
Однако приложение будет развернуто в нескольких средах Active Directory. Конфигурация делегирования вручную оказалась подверженной ошибкам, а устранение проблем, вызывающих неправильную конфигурацию, требует много времени. Я хотел бы создать сценарий установки или программу, которая может сделать это за меня.
Кто-нибудь знает, как создать сценарий или программно установить ограниченное делегирование в AD?
В противном случае, как я могу выполнить сценарий для чтения разрешенных служб, чтобы пользователь мог проверить правильность их настройки?
Утилита joeware "admod" делает это тоже хорошо.
admod -b "полный DN пользователя" "msDS-AllowedToDelegateTo: +: Service / server.x.y.com: port #"
то :+:
означает "добавить", :-:
будет удален, все подробности см. на страницах справки.
Хорошо, после долгих поисков в Интернете и небольшого тестирования я решил это.
Я не нашел утилиты, которая могла бы сделать это за меня из пакетного сценария. Однако я выяснил, какие свойства требуются в рамках базового LDAP. Поэтому мне пришлось написать свою собственную утилиту, чтобы сделать это за меня.
Следующий код C # может устанавливать или проверять ограниченное делегирование:
DirectoryEntry de = new DirectoryEntry("LDAP://"+usersDN);
if (!de.Properties["msDS-AllowedToDelegateTo"].Contains(backendSpnString))
{
de.Properties["msDS-AllowedToDelegateTo"].Add(backendSpnString);
de.CommitChanges();
}
Если у пользователя было включено неограниченное делегирование, вам может потребоваться отключить это перед включением ограниченного, но я не полностью тестировал этот сценарий.
Приведенный выше код написан на C #, поскольку именно на нем написано веб-приложение и, следовательно, оно должно было быть под рукой. Я ожидаю, что любой, кто следит за этим, может при желании переписать на другой язык.