Аутентификация SPNEGO
SPNEGO (Simple and Protected GSS API Negotiation Mechanism) — механизм, применяемый для определения технологии защиты, которая будет использоваться при безопасном подключении. В частности он используется, когда ни сервер, ни клиент не знают о поддерживаемых протоколах безопасности друг друга. SPNEGO использует протокол для определения доступных механизмов GSS API, выбирает один из них и делегирует ему все операции, связанные с безопасностью.
Когда сервер получает запрос от браузера, он может запросить, чтобы тот использовал для аутентификации протокол SPNEGO. Этот протокол осуществляет Kerberos-аутентификацию через HTTP. Детально процесс выглядит так:
-
На запрос с заголовком
WWW-Authorization: Negotiate
сервер возвращает код401 Unauthorized
. -
Браузер связывается с сервисом выдачи тикетов (Ticket Granting Service, TGS) для получения тикета.
-
Полученный тикет оборачивается в закодированный в base64 токен SPNEGO и отправляется на сервер с последующим запросом аутентификации.
-
Токен разворачивается, и сервер аутентифицирует тикет.
Настройка браузера
Некоторым браузерам требуется дополнительная настройка для Kerberos-аутентификации с помощью SPNEGO. Инструкции для самых популярных браузеров представлены ниже.
-
В строке поиска введите команду
about:config
и запустите её. -
Измените следующие параметры, присвоив им соответствующие значения:
-
network.negotiate-auth.trusted-uris
— ваш домен, защищенный Kerberos (например,.ru-central1.internal
). -
network.automatic-ntlm-auth.trusted-uris
— ваш домен, защищенный Kerberos (например,.ru-central1.internal
). -
network.auth.use-sspi
—false
.
-
-
Перезапустите браузер и проследуйте к защищенному ресурсу.
Для корректного процесса аутентификации требуется установить дополнительные политики для браузера.
-
В Windows откройте редактор регистра и раскройте HKEY_LOCAL_MACHINE → SOFTWARE → Google → Chrome. Для добавления новых политик нажмите правой кнопкой мыши в пустом месте, затем New → String value и введите название политики и её значение:
-
AuthSchemes
—digest,ntlm,negotiate
. -
AuthServerAllowlist
—<domain>
. Если этот параметр не установлен, то Google Chrome проверит, есть ли сервер, запрашивающий аутентификацию в интранете. Если есть, то процесс продолжится, а в противном случае — Google Chrome будет игнорировать запросы на аутентификацию, поступающие от этого сервера. -
AuthNegotiateDelegateAllowlist
—<domain>
. Если этот параметр не установлен, то Google Chrome не будет передавать учетные данные пользователей даже серверам, находящимся в интранете.В описаниях параметров выше
<domain>
— ваш домен, защищенный Kerberos (e.g..ru-central1.internal
).Обратите внимание, что хост с Windows обязан находиться в домене, в то время как для Linux это необязательно.
-
-
В Linux перейдите в директорию (создайте недостающие папки) /etc/opt/chrome/policies/managed и создайте файл политики (например, test_policy.json) со следующим содержимым:
{ "AuthServerAllowlist": "<domain>", "AuthNegotiateDelegateAllowlist": "<domain>", "AuthSchemes": "digest,ntlm,negotiate" }
Правильность создания политик можно проверить, запустив команду chrome://policy
в поисковой строке.


При правильной настройке вы сможете получить доступ к запрашиваемым ресурсам с помощью тикета Kerberos, выданного в вашей системе.
В противном случае вы продолжите получать ошибку 401 Unauthorized
.
Поддерживаемые сервисы
Следующие сервисы ADH поддерживают аутентификацию в веб-интерфейсах с помощью SPNEGO:
-
Flink
-
HDFS
-
Hive
-
Impala
-
Kyuubi
-
Spark/Spark 3
-
SSM
-
YARN
Чтобы включить для них механизм SPNEGO (если не указано иначе в инструкции для сервиса), необходимо установить флаг Authentication on WEB UIs при активации Kerberos.
