Я пытался настроить службу Java с помощью СПНЕГО фильтр сервлетов и порт прослушивания 8080 для аутентификации на хосте, на котором также выполняются веб-приложения, размещенные в IIS7.
Я выполнил инструкции по установке SPNEGO и создал SPN для HTTP/canonical.host.name
, привязанный к пользователю, выполняющему аутентификацию для службы Java.
После этого изменения служба Java может аутентифицировать клиентов через SPNEGO, но пулы приложений IIS7, работающие с пользовательскими идентификаторами (то есть именами пользователей вместо ApplicationPoolIdentity), внезапно неспособный для аутентификации.
Чего я здесь не понимаю:
HTTP/canonical.host.name
определяется с помощью (как проверено через setspn -Q
)? Клиенты по-прежнему запрашивают и получают билеты именно для этого SPN.KRB_AP_ERR_MODIFIED
вернулся. Запуск пула приложений от имени пользователя, для которого было зарегистрировано SPN, не изменил этого поведения. Итак, есть ли способ иметь несколько независимых сервисов с аутентификацией SPNEGO на одном хосте?
Последнее вначале: для нескольких служб с аутентификацией SPNEGO на одном хосте, без возни с ключами реестра IE, используйте разные имена.
• Как аутентификация Kerberos работает для IIS, если SPN для HTTP / canonical.host.name не определен с помощью (как проверено с помощью setspn -Q)? Клиенты по-прежнему запрашивают и получают билеты именно для этого SPN.
Это автоматический откат на основе HOST\boxname
SPN, который создается для всех компьютеров во время присоединения к домену - если контроллер домена не находит совпадения для SPECIFICSERVICE \ boxname по запросу клиентского приложения, он предоставит билет на основе HOST \ boxname.
Использовать SETSPN -L boxname
для перечисления SPN, связанных с участником безопасности (учетной записью пользователя или компьютера).
• Ради интереса мы попытались запустить пулы приложений с идентификатором службы Java, которая успешно аутентифицируется. Он по-прежнему не работал, пока было определено SPN - попытки аутентификации с помощью билета Kerberos не удались, и был возвращен KRB_AP_ERR_MODIFIED. Запуск пула приложений от имени пользователя, для которого было зарегистрировано SPN, не изменил этого поведения.
По умолчанию для IIS 7 используется useAppPoolCredentials = false и useKernelMode = true; один или оба из них должны быть переключены, чтобы идентификатор пула приложений использовался для декодирования билетов Kerberos.
• Microsoft указывает SPN для включения номера порта, но IE не соответствует этому и никогда не отправляет номер порта в SPN (Firefox и Chrome следуют этому поведению).
И возвращаясь к реальной сути вопроса: когда все остальное исправлено, IE и другие по-прежнему не будут включать номера портов по умолчанию, поэтому решение с наименьшей модификацией - просто запустить разные заголовки хоста в одном и том же поле.
Также обратите внимание, что из-за другого поведения IE (с тем же аргументом против изменения всех параметров реестра ваших клиентов) CNAME не является хорошим выбором, вместо этого используйте записи A.
У вас есть ключи реестра из этой КБ http://support.microsoft.com/default.aspx?scid=kb;EN-US;908209 настроил на клиенте? В противном случае IE не будет запрашивать правильный билет. Для ясности: ключи reg поставлялись с исправлением IE6 +, но с тех пор применяются ко всем версиям IE.
Я не уверен, что понимаю вашу конфигурацию. Настроено ли имя участника-службы HTTP / canonical.host.name для учетной записи службы, используемой для «службы Java»?
На приставке можно запустить несколько служб с разными идентификаторами. Таким образом, у вас может быть служба под названием HTTP / host1.host.name и HTTP / host2.host.name на одном и том же хосте. Вы можете зарегистрировать участвующие SPN в одной учетной записи службы или в разных учетных записях служб, если захотите.
Запросы на имя участника-службы HTTP сопоставляются с объектами с SPN на основе HOST, если имя участника-службы HTTP нигде явно не задано. Это сопоставление выполняется атрибутом SPNMappings на объекте, который выглядит как CN = Directory Service, CN = Windows NT, CN = Services, CN = Configuration, DC = forest1, DC = local (forest1.local - это имя леса здесь) согласно http://msdn.microsoft.com/en-us/library/cc220898(v=PROT.13).aspx.
Блоги Тристана великолепны. Вы также можете найти блоги по устранению неполадок и другие блоги, связанные с Kerberos, по адресу http://blogs.technet.com/b/askds/archive/tags/kerberos/ полезно.