Метод аутентификации JWT/OIDC
Метод jwt auth
может быть использован для аутентификации в Deckhouse Stronghold с помощью OIDC или путем предоставления JWT.
Метод OIDC позволяет выполнять аутентификацию через настроенный провайдер OIDC с помощью веб-браузера пользователя. Этот метод может быть инициирован из пользовательского интерфейса Deckhouse Stronghold или из командной строки. В качестве альтернативы может быть предоставлен непосредственно JWT. JWT криптографически проверяется с помощью локально предоставленных ключей, либо, если настроен, для получения соответствующих ключей может быть использован сервис OIDC Discovery. Выбор метода настраивается для каждой роли.
Оба метода позволяют дополнительно обрабатывать данные утверждений в JWT. В документе рассмотрены концепции, общие для обоих методов, а также примеры использования OIDC и JWT.
Аутентификация в OIDC
В данном разделе рассматривается настройка и использование ролей OIDC. Предполагается базовое знакомство с концепциями OIDC. Поток Authorization Code использует расширение Proof Key for Code Exchange (PKCE).
Deckhouse Stronghold включает два встроенных потока авторизации OIDC: пользовательский интерфейс Deckhouse Stronghold UI и CLI с использованием логина vault.
Перенаправление URI
Важной частью конфигурации ролей OIDC является правильная настройка URI перенаправления. Это должно быть сделано как в Deckhouse Stronghold, так и в провайдере OIDC, причем эти настройки должны совпадать. URI перенаправления задаются для роли с помощью параметра allowed_redirect_uris
. Для настройки потоков Deckhouse Stronghold UI и CLI существуют различные URI перенаправления, поэтому в зависимости от установки необходимо настроить один или оба.
CLI
Если планируется поддержка аутентификации через d8 stronghold login -method=oidc
, необходимо задать URI перенаправления на localhost. Обычно это может быть: http://localhost:8250/oidc/callback
. При необходимости при входе в систему через CLI можно указать другой хост и/или порт прослушивания, при этом URI с этим хостом/портом должен совпадать с одним из настроенных перенаправляемых URI. Эти же URI “localhost” должны быть добавлены и в провайдер.
Deckhouse Stronghold UI
Для входа в систему через Deckhouse Stronghold сам UI не требует настройки и конфигурируется автоматически при включении Deckhouse Stronghold
Вход в систему OIDC (Deckhouse Stronghold UI)
Выберите метод входа в систему “OIDC”.
При необходимости введите имя роли.
Нажмите кнопку “Войти с помощью провайдера OIDC” и завершите аутентификацию с помощью настроенного провайдера.
Вход в систему OIDC (CLI)
Для входа в систему CLI по умолчанию используется путь /oidc_deckhouse
. Если данный метод аутентификации был включен по другому пути, укажите в CLI путь -path=/my-path
.
d8 stronghold login -method=oidc -path=oidc_deckhouse role=test
Complete the login via your OIDC provider. Launching browser to:
https://myco.auth0.com/authorize?redirect_uri=http%3A%2F%2Flocalhost%3A8400%2Foidc%2Fcallback&client_id=r3qXc2bix9eF...
Браузер откроется по сгенерированному URL-адресу для завершения входа в систему провайдера. URL может быть введен вручную, если браузер не может быть открыт автоматически.
Автоматический запуск браузера по умолчанию на URL переключается при помощи skip_browser
(по умолчанию: “false”) при входе в систему.
Слушатель обратного вызова может быть настроен с помощью следующих необязательных параметров. Обычно их установка не требуется:
- mount (по умолчанию “oidc”)
- listenaddress (по умолчанию “localhost”)
- port (по умолчанию 8250)
- callbackhost (по умолчанию “localhost”)
- callbackmethod (по умолчанию “http”)
- callbackport (по умолчанию - это значение, заданное для порта). Это значение используется в параметре
redirect_uri
, тогда какport
- это порт сервера localhost, который принимает запросы. В некоторых случаях эти два параметра могут различаться.
Конфигурация провайдера OIDC
Способ аутентификации OIDC успешно протестирован с рядом провайдеров. Полное руководство по настройке приложений OAuth/OIDC не входит в документацию Deckhouse Stronghold.
Некоторые советы по устранению неполадок в конфигурации OIDC и настройке OIDC представлены ниже:
-
Если параметр роли (например,
bound_claims
) требует значения карты (map), его нельзя установить отдельно с помощью Deckhouse Stronghold CLI. В таких случаях запишите конфигурацию в виде одного JSON-объекта:d8 stronghold write auth/oidc/role/demo -<<EOF { "user_claim": "sub", "bound_audiences": "abc123", "role_type": "oidc", "policies": "demo", "ttl": "1h", "bound_claims": { "groups": ["mygroup/mysubgroup"] } } EOF
-
Проследите за выводом журнала Deckhouse Stronghold, в котором содержится важная информация о сбоях проверки OIDC.
-
Убедитесь, что URI перенаправления корректны в Deckhouse Stronghold и на провайдере. Они должны точно совпадать. Проверьте: http/https, 127.0.0.1/localhost, номера портов, наличие слэшей в конце.
-
Единственной конфигурацией утверждения, которая требуется для роли, является user_claim. Когда станет известно, что аутентификация работает, добавьте дополнительные привязки утверждений и копирование метаданных.
-
bound_audiences не является обязательным для ролей OIDC и обычно не требуется. Идентификаторы клиентов OIDC используют client_id для определения аудитории, и проверка OIDC предполагает это.
-
Уточните у провайдера диапазоны для получения необходимой информации. Часто требуется запрашивать диапазоны “профиль” и “группы”, которые можно добавить, установив для роли значение
oidc_scopes="profile,groups"
. -
Если в журналах появляются ошибки, связанные с заявками, внимательно изучите документацию поставщика, чтобы понять, как он называет и структурирует заявки. В зависимости от провайдера, сконструируйте простой запрос
curl implicit grant
для получения JWT, который можно просмотреть.
Пример декодирования JWT (в примере он расположен в поле access_token
JSON-ответа) представлен ниже:
cat jwt.json | jq -r .access_token | cut -d. -f2 | base64 -D
- В Deckhouse Stronghold доступна ролевая опция
verbose_oidc_logging
, которая будет записывать полученный OIDC-токен в журналы сервера, если включено ведение журнала на уровне отладки. Это может быть полезно при отладке настройки провайдера и проверке того, что полученные претензии соответствуют ожиданиям. Поскольку данные утверждений записываются в журнал дословно и могут содержать конфиденциальную информацию, эту опцию не следует использовать в производстве.