Назад | Перейти на главную страницу

Автоматическая настройка ограниченного делегирования Kerberos в AD

У меня есть веб-приложение, в котором используются некоторые серверные серверы (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 #, поскольку именно на нем написано веб-приложение и, следовательно, оно должно было быть под рукой. Я ожидаю, что любой, кто следит за этим, может при желании переписать на другой язык.