JWT-аутентификация#

Trino можно настроить для аутентификации доступа клиентов с помощью JSON web tokens. JWT — это небольшой, безопасный для веба JSON-файл, содержащий криптографическую информацию, аналогичную сертификату, включая:

  • Subject

  • Valid time period

  • Signature

JWT предназначен для передачи между серверами как подтверждение ранее выполненной аутентификации в рабочем процессе, подобном следующему:

  1. Конечный пользователь входит в клиентское приложение и запрашивает доступ к серверу.

  2. Сервер отправляет учетные данные пользователя в отдельный сервис аутентификации, который:

    • проверяет пользователя

    • генерирует JWT как подтверждение проверки

    • возвращает JWT на запрашивающий сервер

  3. Этот же JWT затем может передаваться в другие сервисы для сохранения подтвержденной аутентификации пользователя без повторной передачи учетных данных.

Important

Если вы пытаетесь настроить OAuth2 или OIDC, в Trino для этого есть отдельный механизм, как описано в OAuth 2.0-аутентификация. При использовании OAuth2-аутентификации вам не нужно настраивать JWT-аутентификацию, поскольку JWT обрабатываются автоматически кодом OAuth2.

Типичный сценарий использования JWT-аутентификации — поддержка администраторов крупных площадок, которые пишут собственную систему single sign-on или proxy, работающую между пользователями и координатором Trino, когда новая система отправляет запросы от имени пользователей.

Для JWT-аутентификации требуется использовать TLS и a configured shared secret.

Использование JWT-аутентификации#

Trino поддерживает JWT в кодировке Base64, но не поддерживает зашифрованные JWT.

Есть два способа получить ключ шифрования, необходимый для проверки подписи JWT:

  • Загружать ключ из endpoint-сервиса JSON web key set (JWKS) (типичный случай)

  • Загружать ключ из локальной файловой системы на координаторе Trino

JWKS endpoint — это read-only сервис, содержащий информацию о публичных ключах в формате JWK. Эти публичные ключи являются парой к приватным ключам, которыми подписываются JSON web token.

Конфигурация JWT-аутентификации#

Включите JWT-аутентификацию, задав JWT authentication type в etc/config.properties, и указав URL или путь к файлу ключа:

http-server.authentication.type=JWT
http-server.authentication.jwt.key-file=https://cluster.example.net/.well-known/jwks.json

JWT-аутентификация обычно используется в дополнение к другим методам аутентификации:

http-server.authentication.type=PASSWORD,JWT
http-server.authentication.jwt.key-file=https://cluster.example.net/.well-known/jwks.json

Доступны следующие свойства конфигурации:

Configuration properties for JWT authentication#

Property

Description

http-server.authentication.jwt.key-file

Обязательное. Указывает либо URL на JWKS-сервис, либо путь к PEM- или HMAC-файлу, как описано ниже в таблице.

http-server.authentication.jwt.required-issuer

Указывает строку, которая должна совпадать со значением поля issuer (iss) JWT, чтобы JWT считался валидным. Поле iss в JWT идентифицирует principal, выпустивший JWT.

http-server.authentication.jwt.required-audience

Указывает строку, которая должна совпадать со значением поля Audience (aud) JWT, чтобы JWT считался валидным. Поле aud в JWT идентифицирует получателей, для которых предназначен JWT.

http-server.authentication.jwt.principal-field

Строка, указывающая поле в JWT, которое идентифицирует subject JWT. Значение по умолчанию — sub. Это поле используется для создания Trino principal.

http-server.authentication.jwt.user-mapping.pattern

Шаблон регулярного выражения, чтобы map all user names для этой системы аутентификации в формат, ожидаемый сервером Trino.

http-server.authentication.jwt.user-mapping.file

Путь к JSON-файлу, содержащему набор user mapping rules для этой системы аутентификации.

Используйте свойство http-server.authentication.jwt.key-file, чтобы указать одно из следующего:

  • URL к JWKS endpoint-сервису, где URL начинается с https://. JWKS-сервис должен быть доступен с координатора. Если координатор запущен в защищенной сети или за firewall, администратору может потребоваться открыть доступ к хосту JWKS-сервера.

    Caution

    Сервер Trino также принимает JWKS URL, начинающиеся с http://, но использование этого протокола создает серьезный риск безопасности. Используйте этот протокол только для кратковременного тестирования во время разработки кластера.

  • Путь к локальному файлу в формате PEM или HMAC, содержащему один ключ. Если путь к файлу содержит ${KID}, Trino подставляет kid из заголовка JWT в путь к файлу перед загрузкой ключа. Это добавляет поддержку конфигураций с несколькими ключами.

Использование JWT с клиентами#

При использовании Trino CLI укажите JWT, как описано в Аутентификация JWT.

При использовании JDBC-драйвера Trino укажите JWT через accessToken parameter.

Ресурсы#

Следующие ресурсы могут быть полезны при работе с JWT и JWK.