OAuth 2.0-аутентификация#
Trino можно настроить для включения OAuth 2.0-аутентификации по HTTPS для Web UI и JDBC-драйвера. Trino использует поток Authorization Code, в котором Authorization Code обменивается на токен. В общих чертах поток включает следующие шаги:
координатор Trino перенаправляет браузер пользователя на Authorization Server
пользователь проходит аутентификацию на Authorization Server, и сервер одобряет запрос разрешений Trino
браузер пользователя перенаправляется обратно на координатор Trino с authorization code
координатор Trino обменивает authorization code на токен
Чтобы включить OAuth 2.0-аутентификацию для Trino, изменения конфигурации выполняются на координаторе Trino. Изменения в конфигурации worker не требуются; аутентифицируется только коммуникация от клиентов к координатору.
При настройке OAuth 2.0 authorization server, например OpenID Connect (OIDC)
provider, задайте callback/redirect URL как
https://<trino-coordinator-domain-name>/oauth2/callback.
Если Web UI включен, при настройке OAuth 2.0 authentication server,
например OpenID Connect (OIDC) provider, задайте post-logout callback URL как
https://<trino-coordinator-domain-name>/ui/logout/logout.html.
Для OAuth 2.0-аутентификации требуется использовать TLS и a configured shared secret.
OpenID Connect Discovery#
Trino поддерживает чтение конфигурации Authorization Server из OIDC provider configuration metadata document. Во время запуска координатора Trino получает этот документ и использует предоставленные значения для установки соответствующих свойств конфигурации OAuth2-аутентификации:
authorization_endpoint->http-server.authentication.oauth2.auth-urltoken_endpoint->http-server.authentication.oauth2.token-urljwks_uri->http-server.authentication.oauth2.jwks-urluserinfo_endpoint->http-server.authentication.oauth2.userinfo-urlaccess_token_issuer->http-server.authentication.oauth2.access-token-issuerend_session_endpoint->http-server.authentication.oauth2.end-session-url
Warning
Если authorization server выдает JSON Web Tokens (JWT), а metadata document
содержит userinfo_endpoint, Trino использует этот endpoint для
проверки валидности OAuth2 access token. Поскольку JWT можно проверять
локально, использование их через userinfo_endpoint может приводить к
ошибке аутентификации. В таком случае задайте
http-server.authentication.oauth2.oidc.use-userinfo-endpoint
в false
(http-server.authentication.oauth2.oidc.use-userinfo-endpoint=false). Это
указывает Trino игнорировать userinfo_endpoint и проверять токены локально.
Эта функциональность включена по умолчанию, но может быть отключена с помощью:
http-server.authentication.oauth2.oidc.discovery=false.
Конфигурация сервера Trino#
Использование OAuth2-аутентификации требует, чтобы координатор Trino был защищен TLS.
Ниже приведен пример обязательных свойств, которые нужно добавить
в файл config.properties координатора:
http-server.authentication.type=oauth2
http-server.https.port=8443
http-server.https.enabled=true
http-server.authentication.oauth2.issuer=https://authorization-server.com
http-server.authentication.oauth2.client-id=CLIENT_ID
http-server.authentication.oauth2.client-secret=CLIENT_SECRET
Чтобы включить OAuth 2.0-аутентификацию для Web UI, необходимо добавить следующее свойство:
web-ui.authentication.type=oauth2
Доступны следующие свойства конфигурации:
Свойство |
Описание |
|---|---|
|
Тип используемой аутентификации. Для включения OAuth2-аутентификации
координатора Trino должен быть установлен в |
|
URL издателя IdP. Все выданные токены должны содержать это значение в поле |
|
URL издателя IdP для access token, если он отличается. Все выданные access
token должны содержать это значение в поле |
|
URL авторизации. URL, на который будет перенаправлен браузер пользователя для начала процесса OAuth 2.0 authorization. Указание этого значения при включенном OIDC discovery переопределяет значение из OpenID provider metadata document. |
|
URL endpoint на authorization server, который Trino использует для получения access token. Указание этого значения при включенном OIDC discovery переопределяет значение из OpenID provider metadata document. |
|
URL endpoint JSON Web Key Set (JWKS) на authorization server. Он предоставляет Trino набор ключей, содержащий public key для проверки любого JSON Web Token (JWT) от authorization server. Указание этого значения при включенном OIDC discovery переопределяет значение из OpenID provider metadata document. |
|
URL endpoint |
|
Публичный идентификатор клиента Trino. |
|
Секрет, используемый для авторизации клиента Trino на authorization server. |
|
Дополнительные аудитории, которым доверяют, помимо client ID, который всегда является доверенной аудиторией. |
|
Scopes, запрашиваемые сервером во время authorization challenge. См.: https://tools.ietf.org/html/rfc6749#section-3.3 |
|
Максимальная длительность authorization challenge.
По умолчанию |
|
Секретный ключ, используемый алгоритмом SHA-256 HMAC для подписи параметра state, чтобы гарантировать, что authorization request не был подделан. По умолчанию это случайная строка, сгенерированная во время запуска координатора. |
|
Regex для сопоставления пользователя. При совпадении имя пользователя
заменяется первой regex-группой. При отсутствии совпадения аутентификация
отклоняется. По умолчанию |
|
Файл, содержащий правила сопоставления пользователей. Подробнее см. в Сопоставление пользователей. |
|
Поле access token, используемое для Trino user principal. По умолчанию
|
|
Включить чтение OIDC provider metadata.
По умолчанию |
|
Таймаут при чтении OpenID provider metadata. По умолчанию |
|
Использовать значение |
|
URL endpoint на authentication server, на который перенаправляется браузер пользователя, чтобы End-User был разлогинен из authentication server при выходе из Trino. |
Refresh tokens#
Refresh tokens позволяют безопасно управлять длительностью пользовательских сессий в приложениях. Refresh token имеет более долгий срок жизни (TTL) и используется для обновления access token с более коротким сроком жизни. Когда refresh tokens используются вместе с access tokens, пользователи могут оставаться в системе длительное время без прерывания повторным запросом входа.
В потоке refresh token используются три токена с разными сроками действия:
access token
refresh token
Trino-encrypted token, который является комбинацией access token и refresh token. Encrypted token управляет временем жизни сессии через timeout, задаваемый свойством
http-server.authentication.oauth2.refresh-tokens.issued-token.timeout.
В следующем сценарии срок жизни токенов, выдаваемых IdP:
access token 5m
refresh token 24h
Поскольку срок жизни access token всего пять минут, Trino использует
refresh token с более долгим сроком, чтобы запрашивать новый access token
каждые пять минут от имени пользователя. В этом случае максимальное значение
http-server.authentication.oauth2.refresh-tokens.issued-token.timeout
составляет двадцать четыре часа.
Чтобы использовать flow refresh token, следующее свойство должно быть включено в конфигурации координатора.
http-server.authentication.oauth2.refresh-tokens=true
Могут потребоваться дополнительные scopes для офлайн-доступа, в зависимости от конфигурации IdP.
http-server.authentication.oauth2.scopes=openid,offline_access [or offline]
Доступны следующие свойства конфигурации:
Свойство |
Описание |
|---|---|
|
Срок действия issued token, то есть Trino-encrypted token,
который содержит access token и refresh token. Значение timeout должно быть
меньше или равно длительности срока действия refresh token,
выдаваемого IdP. По умолчанию |
|
Issuer, представляющий экземпляр координатора, который указывается в
issued token. По умолчанию |
|
Audience, представляющая этот экземпляр координатора, используемая в
issued token. По умолчанию |
|
Base64-encoded secret key, используемый для шифрования сгенерированного токена. По умолчанию генерируется во время запуска. |
Устранение неполадок#
Для отладки проблем измените [log level
io.trino.server.security.oauth2=DEBUG
Для отладки проблем использования OAuth 2.0-аутентификации с Web UI задайте следующее свойство конфигурации:
io.trino.server.ui.OAuth2WebUiAuthenticationFilter=DEBUG
Предполагается, что OAuth 2.0-аутентификация для Web UI включена, как описано в Конфигурация сервера Trino.
Логируемая отладочная ошибка для просроченного refresh token:
Tokens refresh challenge has failed.
Warning
Если refresh token истекает, пользовательская сессия прерывается, и пользователь
должен повторно аутентифицироваться, выполнив вход снова. Убедитесь, что
значение http-server.authentication.oauth2.refresh-tokens.issued-token.timeout
меньше или равно длительности срока действия refresh token,
выдаваемого вашим IdP. Оптимально задавать timeout немного меньше,
чем срок жизни refresh token вашего IdP, чтобы сессии завершались корректно.