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