Метод аутентификации jwt позволяет пройти аутентификацию в Stronghold через OIDC или с помощью JWT.
Метод OIDC позволяет выполнять аутентификацию через настроенный OIDC-провайдер с помощью веб-браузера пользователя. Аутентификацию можно начать из веб-интерфейса Stronghold или из командной строки. Также можно передать JWT напрямую. JWT криптографически проверяется с помощью локально заданных ключей или, если он настроен, через сервис OIDC Discovery, у которого запрашиваются нужные ключи. Способ аутентификации задаётся для каждой роли.
Оба способа позволяют дополнительно обрабатывать данные утверждений (claims) в JWT. На этой странице описаны понятия, общие для обоих способов, и сценарии входа через OIDC.
Аутентификация через OIDC
В этом разделе описаны настройка и использование ролей OIDC. Предполагается базовое знакомство с концепциями OIDC. Сценарий Authorization Code использует расширение Proof Key for Code Exchange (PKCE).
В Stronghold есть два встроенных сценария входа через OIDC: веб-интерфейс Stronghold и CLI (d8 stronghold login).
URI перенаправления
Если не используется callbackmode=device, важная часть настройки ролей OIDC — правильно заданные URI перенаправления. Их нужно задать и в Stronghold, и в OIDC-провайдере, и эти настройки должны совпадать. URI перенаправления задаются для роли в параметре allowed_redirect_uris. Для сценариев входа через веб-интерфейс Stronghold и через CLI используются разные URI перенаправления, поэтому в зависимости от установки настройте один или оба.
CLI
Если планируется аутентификация через d8 stronghold login -method=oidc и не используется callbackmode=device, задайте URI перенаправления с путём, который заканчивается на oidc/callback. При режиме по умолчанию callbackmode=client это обычно http://localhost:8250/oidc/callback. При callbackmode=direct используйте URI следующего вида:
https://<HOST>:<PORT>/v1/auth/<MOUNT_PATH>/oidc/callbackГде:
<HOST>:<PORT>— имя и порт сервера Stronghold;<MOUNT_PATH>— путь, по которому смонтирован метод аутентификации, напримерoidcилиjwt.
При входе через CLI можно указать другой хост и/или порт прослушивания. URI с этим хостом и портом должен совпадать с одним из настроенных URI перенаправления. Эти же URI нужно добавить в провайдер.
Stronghold UI
В Stronghold в DP URI перенаправления для веб-интерфейса Stronghold и для CLI настраиваются автоматически, если модуль stronghold работает в режиме управления Automatic.
Вход через OIDC (Stronghold UI)
Чтобы войти через веб-интерфейс Stronghold, выполните следующие шаги:
- Выберите метод входа «OIDC».
- При необходимости введите имя роли.
- Нажмите кнопку входа и завершите аутентификацию у настроенного провайдера.
Вход через OIDC (CLI)
По умолчанию CLI использует путь монтирования oidc. В Stronghold в DP метод смонтирован по пути oidc_deckhouse. Если метод аутентификации смонтирован по другому пути, укажите его в параметре -path.
- Stronghold в DP
- Stronghold в Linux
$ 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%3A8250%2Foidc%2Fcallback&client_id=r3qXc2bix9eF...
$ stronghold login -method=oidc role=test
Complete the login via your OIDC provider. Launching browser to:
https://myco.auth0.com/authorize?redirect_uri=http%3A%2F%2Flocalhost%3A8250%2Foidc%2Fcallback&client_id=r3qXc2bix9eF...
Браузер открывает сгенерированный URL, чтобы завершить вход у провайдера. Если браузер не открывается автоматически, введите URL вручную. Параметр skip_browser (по умолчанию false) отключает автоматический запуск браузера.
Слушатель обратного вызова настраивается следующими необязательными параметрами. Обычно задавать их не требуется:
mount(по умолчаниюoidc) — путь монтирования метода аутентификации.callbackmode(по умолчаниюclient) — режим обратного вызова:client— подключение к порту на стороне CLI-клиента;direct— прямое подключение к серверу Stronghold;device— сценарий device flow без обратного вызова.
listenaddress(по умолчаниюlocalhost) — только для режимаclient.port(по умолчанию8250) — только для режимаclient.callbackhost(по умолчанию в режимеdirect— хост сервера Stronghold, в остальных случаях —localhost).callbackmethod(по умолчанию в режимеdirect— схема сервера Stronghold, в остальных случаях —http) — схема, которая используется в OIDCredirect_uri.callbackport(по умолчанию в режимеclient— значениеport, в остальных случаях — порт сервера Stronghold и суффикс/v1/auth/<MOUNT_PATH>, где<MOUNT_PATH>— значение параметра входа-path). Это значение используется вredirect_uri, аport— это порт на localhost, который прослушивает слушатель. В сложных конфигурациях эти значения могут различаться.
Настройка OIDC-провайдера
Зарегистрируйте Stronghold как клиентское приложение в OIDC-провайдере и добавьте URI перенаправления из раздела «URI перенаправления». Руководства для отдельных провайдеров: GitLab, Keycloak, Kubernetes.
Устранение неполадок в настройке OIDC
Для устранения неполадок в настройке OIDC используйте следующие советы:
Если параметр роли (например,
bound_claims) требует значения-словаря (map), его нельзя задать отдельно через CLI Stronghold. В таких случаях запишите всю конфигурацию в виде одного JSON-объекта:- Stronghold в DP
- Stronghold в Linux
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"] } } EOFstronghold 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Следите за журналом Stronghold. В нём есть информация о сбоях проверки OIDC.
Убедитесь, что URI перенаправления в Stronghold и в провайдере точно совпадают. Проверьте: http/https, 127.0.0.1/localhost, номера портов, наличие слешей в конце.
Начните с минимальной конфигурации. Единственная настройка утверждений, обязательная для роли, —
user_claim. Когда аутентификация заработает, добавьте привязки утверждений и копирование метаданных.bound_audiences— необязательный параметр для ролей OIDC, обычно он не требуется. OIDC-провайдеры используютclient_idв качестве аудитории, и проверка OIDC это учитывает.Уточните, какие области (scopes) нужно запросить у провайдера, чтобы получить всю нужную информацию. Часто нужны области
profileиgroups. Добавьте их, задав для ролиoidc_scopes="profile,groups".Если в журналах появляются ошибки, связанные с утверждениями, изучите документацию провайдера: как он называет и структурирует утверждения. В зависимости от провайдера можно составить
curl-запрос implicit grant, чтобы получить JWT и изучить его. Чтобы декодировать JWT из поляaccess_tokenJSON-ответа, выполните:cat jwt.json | jq -r .access_token | cut -d. -f2 | base64 -dПараметр роли
verbose_oidc_loggingзаписывает полученный OIDC-токен в журналы сервера, если включено журналирование на уровне debug. Он помогает отлаживать настройку провайдера и проверять полученные утверждения. Данные утверждений записываются в журнал без изменений и могут содержать конфиденциальную информацию, поэтому не включайте этот параметр в production-окружении.