Настройка SSO
В веб-интерфейсе YTsaurus реализовано два типа аутентификации пользователей: по паролю и через SSO. Как работать с паролями — написано в Руководстве пользователя. В данной статье описано, как сконфигурировать SSO.
Важно
YTsaurus поддерживает SSO-аутентификацию только по протоколу OAuth 2.0. При настройке SSO выбирайте такой Identity Server, который поддерживает работу с OAuth.
Конфигурация
Для корректной работы аутентификации необходимо настроить две компоненты: прокси и веб-интерфейс.
-
Чтобы настроить прокси, следует заполнить поле
oauthService
в спецификации ресурса ytsaurus. -
Для конфигурации веб-интерфейса необходимо задать настройку ytOAuthSettings в конфиге веб-интерфейса. Сделать это можно через ui-helm-chart, заполнив поле
settings.oauth
вvalues.yaml
.
Пример
Ниже приведён пример — как настроить SSO-аутентификацию в YTsaurus с помощью сервиса Microsoft Identity Platform.
-
Сначала необходимо завести OAuth-приложение в MS Identity Platform. В качестве RedirectURIs следует задать
https://<HOST_NAME_OF_YOUR_YT_CLUSTER>/api/oauth/callback
.При создании приложения будут получены
CLIENT_ID
иCLIENT_SECRET
. Также потребуется определитьTENANT_ID
— узнать его можно у администратора OAuth-сервера. Полученные параметры необходимо будет указывать в спецификации веб-интерфейса. -
Далее следует настроить сервер:
# ytsaurus.yaml apiVersion: cluster.ytsaurus.tech/v1 kind: Ytsaurus metadata: name: ytdemo spec: oauthService: host: graph.microsoft.com port: 443 secure: true userInfoHandler: endpoint: oidc/userinfo loginField: email # ...
-
Настройка веб-интерфейса будет выглядеть следующим образом:
# ui-helm.values.yaml ui: image: repository: ghcr.io/ytsaurus/ui # ... settings: oauth: enabled: false baseURL: "https://login.microsoftonline.com/mycompany.onmicrosoft.com/oauth2/v2.0/" # mycompany.onmicrosoft.com is a tenant ID example authPath: "authorize" logoutPath: "logout" tokenPath: "token" clientIdEnvName: "CLIENT_ID" clientSecretEnvName: "CLIENT_SECRET" scope: "openid offline_access" # offline_access scope is required for api to respond with refresh_token buttonLabel: "Login via SSO"
Детали реализации
Ниже описано, как устроен флоу работы с OAuth. Это понимание поможет при локализации возможных проблем конфигурации.
- Пользователь открывает веб-интерфейс YTsaurus и нажимает "Login via SSO".
- Веб-интерфейс YTsaurus перенаправляет пользователя на URL стороннего OAuth Identity Server с пробросом сконфигурированных
scope
. URL стороннего сервера формируется на основеbaseURL
иauthPath
. - Пользователь соглашается с запрошенными разрешениями, и OAuth Identity Server перенаправляет пользователя на адрес, который был задан в настройках OAuth-приложения —
https://<HOST_NAME_OF_YOUR_YT_CLUSTER>/api/oauth/callback
. В query-параметреcode
передаётся код авторизации. - Веб-интерфейс делает запрос в OAuth Identity Server по URL из
baseURL
иtokenPath
. В запросе передаются код авторизации и секрет приложения. В ответе приходятaccess_token
иrefresh_token
. - Веб-интерфейс выставляет токены в cookie браузера пользователя:
yt_oauth_access_token
иyt_oauth_refresh_token
. - Когда
yt_oauth_access_token
истекает — веб-интерфейс обновляет его, используяyt_oauth_refresh_token
. - Веб-интерфейс отправляет запросы в прокси, передавая значение cookie
yt_oauth_access_token
. Прокси делает запрос в OAuth Identity Server на URL, который формируется на основеoauthService.host
,oauthService.port
иoauthService.userInfoHandler.endpoint
. - Из полученного ответа достаётся поле, сконфигурированное в
oauthService.userInfoHandler.loginField
— оно используется в качестве username пользователя YTsaurus.