Проверка подлинности Kerberos в IIS 7
У нас есть некоторый веб-контент, который настраивается в виртуальных каталогах с помощью встроенной проверки подлинности windows. Виртуальные каталоги выполняются в пулах приложений, использующих пользовательское удостоверение (пользовательскую учетную запись пользователя). Проблема заключается в том, что аутентификация NTLM работает, а аутентификация Kerberos-нет. Это та же конфигурация, которая работала в IIS 6, но нам нужно перейти на IIS 7, и проверка подлинности Kerberos не работает.
Вот еще немного информации о моем окружающая среда:
Параметры Аутентификации Виртуального Каталога:
- все отключено, кроме проверки подлинности Windows
- включить аутентификацию в режиме ядра: включено
Настройки Пула Приложений:
- Режим Управляемого Конвейера: Классический
- Identity: пользовательский локальный пользователь
Паутина.настройки конфигурации:
- режим аутентификации = "Windows"
- система.средство servicemodel/привязки/привязки basichttpbinding/связывания/безопасности/режим = TransportCredentialOnly
- система.средство servicemodel/привязки/привязки basichttpbinding/связывания/безопасности/транспорта/clientCredentailType = окна
- serviceHostingEnvironment/aspNetCompatibilityEnabled = true
Виртуальный Каталог Разрешения:
- пользовательские локальные группы: мы добавляем пользователей домена в локальные группы для доступа к сервису
Настройки ОС:
- IIS 7
- Windows Server 2008 x64 standard С пакетом обновления 2
Вот анализ, который я получаю от fiddler, сравнивая IIS 6 с IIS 7. Проверка подлинности Kerberos отлично работает в IIS 6 с пулом приложений, работающим с пользовательским удостоверением.
Ссылка (IIS 6) (работает):
Скрипач:
(использование доменапользователя)
Запрос 1 (без авт.)
No Proxy-Authorization Header is present.
No Authorization Header is present.
Ответ 1 (401) (вызов)
No Proxy-Authenticate Header is present.
WWW-Authenticate Header is present: Negotiate
WWW-Authenticate Header is present: NTLM
Запрос 2 (билет Kerberos)
Authorization Header (Negotiate) appears to contain a Kerberos ticket:
<data>
Ответ 2 (401) (Kerberos ответ)
WWW-Authenticate Header (Negotiate) appears to be a Kerberos reply:
<data>
Запрос 3 (билет Kerberos)
Authorization Header (Negotiate) appears to contain a Kerberos ticket:
<data>
Ответ 3 (401) (Kerberos reply)
WWW-Authenticate Header (Negotiate) appears to be a Kerberos reply:
<data>
Запрос 4 (билет Kerberos)
Authorization Header (Negotiate) appears to contain a Kerberos ticket:
<data>
Ответ 4 (200) (Kerberos Reply)
WWW-Authenticate Header (Negotiate) appears to be a Kerberos reply:
<data>
И транзакция завершается, и браузер отображает страницу.
(IIS 7) (не работает):
Скрипач:
(использование доменапользователя)
Запрос 1 (без авт.)
No Proxy-Authorization Header is present.
No Authorization Header is present.
Ответ 1 (401) ( Переговоры)
No Proxy-Authenticate Header is present.
WWW-Authenticate Header is present: Negotiate
WWW-Authenticate Header is present: NTLM
Запрос 2 (билет Kerberos)
Authorization Header (Negotiate) appears to contain a Kerberos ticket:
<data>
Ответ 2 (401) (Переговоры)
No Proxy-Authenticate Header is present.
WWW-Authenticate Header is present: Negotiate
WWW-Authenticate Header is present: NTLM
Обратите внимание, что IIS 7 не принимает мой билет Kerberos в ответе 2. Есть идеи, почему бы и нет? Нужно ли перенастроить некоторые компоненты IIS 7, чтобы обеспечить работу проверки подлинности Kerberos?
2 ответов:
Разрешение
Чтобы заставить IIS 7 согласовывать аутентификацию, как это делает IIS 6, мне пришлось установить useAppPoolCredentials элемента windowsAuthentication моего виртуального каталога в applicationHost.конфигурационный файл в true. Это делается с помощью одной из следующих команд:
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/security/authentication/windowsAuthentication -useAppPoolCredentials:trueДля применения к отдельным заявкам:
Первая разблокировка:
%windir%\system32\inetsrv\appcmd.exe unlock config /section:windowsAuthenticationЗатем примените:
%windir%\system32\inetsrv\appcmd.exe set config "Default Web Site/myApp/" /section:windowsAuthentication -useAppPoolCredentials:trueПримечание - это на самом деле не делает Kerberos работать. Что он делает это заставьте IIS 7 вести себя как IIS 6. Это означает, что если согласование Kerberos между сервером и клиентом завершается неудачей, то сервер автоматически возвращается к NTLM. Это на самом деле то, что заставило аутентификацию работать для меня (NTLM).
Используется ли поставщик Negotiate:Kerberos для проверки подлинности Windows? Если существует проблема с Kerberos, вы можете получить более подробную информацию о проблеме, запустив Network Monitor (или что-то подобное, например WireShark ) на клиенте при попытке аутентификации. Посмотрите на сообщения в процессе Internet Explorer,и вы можете увидеть некоторые действия Kerberos.
Comments