Проверка подлинности Kerberos в IIS 7 - PullRequest
9 голосов
/ 23 сентября 2010

У нас есть некоторый веб-контент, который настраивается в виртуальных каталогах с использованием встроенной аутентификации Windows. Виртуальные каталоги выполняются в пулах приложений, использующих пользовательскую идентификацию (учетную запись пользователя). Проблема в том, что аутентификация NTLM работает, а аутентификация Kerberos - нет. Это та же конфигурация, которая работала в IIS 6, но нам нужно перейти на IIS 7, а аутентификация Kerberos не работает.

Вот еще немного информации о моей среде:

Настройки аутентификации виртуального каталога:

  • Все отключено, кроме аутентификации Windows
  • Включить аутентификацию в режиме ядра: включено

Настройки пула приложений:

  • Управляемый конвейерный режим: классический
  • Удостоверение: пользовательский локальный пользователь

Настройки Web.config:

  • режим аутентификации = "Windows"
  • system.serviceModel / bindings / basicHttpBinding / binding / security / mode = TransportCredentialOnly
  • system.serviceModel / bindings / basicHttpBinding / привязка / безопасность / транспорт / clientCredentailType = Windows
  • serviceHostingEnvironment / aspNetCompatibilityEnabled = true

Виртуальный каталог Разрешения:

  • Пользовательские локальные группы: мы добавляем пользователей домена в локальные группы для доступа к услуге

Настройки ОС:

  • IIS 7
  • Windows Server 2008 x64 стандарт SP2

Вот анализ, который я получаю от 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)

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)

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 в Response 2 . Есть идеи почему бы и нет? Нужно ли переконфигурировать некоторые вещи в IIS 7, чтобы заставить работать аутентификацию Kerberos?

Ответы [ 2 ]

11 голосов
/ 01 октября 2010

РАЗРЕШЕНИЕ

Чтобы получить IIS 7 для согласования проверки подлинности в качестве IIS 6, мне пришлось установить для true значение useAppPoolCredentials элемента windowsAuthentication моего виртуального каталога в файле applicationHost.config.Это делается с помощью одной из следующих команд:

%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).

0 голосов
/ 23 сентября 2010

Используете ли вы поставщик согласования: Kerberos для проверки подлинности Windows? Если есть проблема вокруг Kerberos, вы можете получить более подробную информацию о ней, запустив Сетевой монитор (или что-то похожее на WireShark ) на клиенте при попытке аутентификации , Посмотрите на сообщения в процессе Internet Explorer, и вы сможете увидеть, что происходит в Kerberos.

...