Могу ли я указать клиентам, что SPNEGO поддерживается, но NTLM не для HTTP-запросов? - PullRequest
6 голосов
/ 29 января 2009

Два дополнения WWW-Authenticate, которые Microsoft использует, о которых мне известно в настоящее время:

  • NTLM
  • Переговоры

Если Negotiate отправляется с сервера, на основе набора условий будет использоваться Kerberos

  • Интранет-зона
  • Доступ к серверу с использованием имени хоста, а не IP
  • Встроенная проверка подлинности Windows в IE включена, хост доверяет Firefox
  • Сервер не является локальным для браузера
  • Система Kerberos клиента аутентифицируется на контроллере домена

Тогда между сервером и клиентом будет предпринята попытка Kerberos, если что-то из перечисленного не будет выполнено, тогда будет предпринята попытка NTLM.

У меня вопрос, есть ли у сервера способ указать, что NTLM не следует отправлять? В настоящее время я занимаюсь этим, отслеживая запрос в сеансе, и, если получено сообщение NTLM, он отключает Kerberos и WWW-Authenticate до конца этой сессии.

Ответы [ 3 ]

3 голосов
/ 04 ноября 2009

Да, вы можете. Взгляните на справочные документы проекта SPNEGO HTTP Servlet Filter.

2 голосов
/ 23 октября 2009

Вы можете сделать это, (по крайней мере, в теории) да. IE может делать совершенно странные вещи, такие как отправка токенов Kerberos без соответствующей инкапсуляции SPNEGO ASN.1, но это другая тема. В соответствующей SPNEGO (http://tools.ietf.org/html/rfc4178#section-4.1) реализации вы можете сделать это.

Если вы можете манипулировать элементом mechTypes NegTokenInit, чтобы он содержал только Kerberos, это заставит клиента отправлять Kerberos или не сможет пройти аутентификацию.

2 голосов
/ 11 июня 2009

Исходный заголовок WWW-Authenticate указывает только negotiate. Больше ничего сказать не может, например "нет NTLM" .

Я думаю, что можно ответить на первый заголовок Authenticate: {Base64 NTLMSSP}, отправленный клиентом с 401 unauthorized и вторым заголовком Negotiate, который может включать в себя токен ответа, возможно, включая SupportedMechanisms, который указывает Только Kerberos.

Но я подозреваю, что вы получите только "unauthorized", потому что в первую очередь он возвращался к NTLM.

...