Могу ли я указать клиентам, что SPNEGO поддерживается, но NTLM не для HTTP-запросов?
Microsoft использует два дополнения WWW-Authenticate, о которых мне известно в настоящее время:
- NTLM
- вести переговоры
Если согласование отправлено с сервера, на основе набора условий будет использоваться Kerberos
- Интранет-зона
- Доступ к серверу с использованием имени хоста, а не IP
- Встроенная проверка подлинности Windows в IE включена, хост доверяет Firefox
- Сервер не является локальным для браузера
- Система Kerberos клиента аутентифицируется на контроллере домена
Затем между сервером и клиентом будет предпринята попытка Kerberos. Если что-то из перечисленного не будет выполнено, будет предпринята попытка NTLM.
У меня вопрос, есть ли способ для сервера указать, что NTLM не должен быть отправлен? В настоящее время я занимаюсь этим, отслеживая запрос в сеансе, и, если получено сообщение NTLM, он отключает Kerberos и WWW-Authenticate до конца этой сессии.
3 ответа
Начальный WWW-Authenticate
только заголовок указывает negotiate
, Больше ничего сказать не может, например, "нет NTLM".
Я думаю, что можно ответить на первый заголовок Authenticate: {Base64 NTLMSSP}, отправленный клиентом с 401 unauthorized
и второй Negotiate
заголовок, который может включать токен ответа, возможно, включая SupportedMechanisms
это определяет только Kerberos.
Но я подозреваю, что только вы получите "unauthorized"
потому что вначале он возвращался к NTLM.
Да, ты можешь. Взгляните на справочные документы проекта SPNEGO HTTP Servlet Filter.
Вы можете сделать это, (по крайней мере, в теории), да. IE может делать совершенно странные вещи, такие как отправка токенов Kerberos без соответствующей инкапсуляции SPNEGO ASN.1, но это другая тема. В соответствующей реализации SPNEGO ( http://tools.ietf.org/html/rfc4178) вы можете сделать это.
Если вы можете манипулировать элементом mechTypes NegTokenInit, чтобы он содержал только Kerberos, это заставит клиента отправлять Kerberos или не сможет пройти аутентификацию.