JWT-аутентификация#
Trino можно настроить для аутентификации доступа клиентов с помощью JSON web tokens. JWT — это небольшой, безопасный для веба JSON-файл, содержащий криптографическую информацию, аналогичную сертификату, включая:
Subject
Valid time period
Signature
JWT предназначен для передачи между серверами как подтверждение ранее выполненной аутентификации в рабочем процессе, подобном следующему:
Конечный пользователь входит в клиентское приложение и запрашивает доступ к серверу.
Сервер отправляет учетные данные пользователя в отдельный сервис аутентификации, который:
проверяет пользователя
генерирует JWT как подтверждение проверки
возвращает JWT на запрашивающий сервер
Этот же 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
Доступны следующие свойства конфигурации:
Property |
Description |
|---|---|
|
Обязательное. Указывает либо URL на JWKS-сервис, либо путь к PEM- или HMAC-файлу, как описано ниже в таблице. |
|
Указывает строку, которая должна совпадать со значением поля issuer ( |
|
Указывает строку, которая должна совпадать со значением поля Audience ( |
|
Строка, указывающая поле в JWT, которое идентифицирует subject
JWT. Значение по умолчанию — |
|
Шаблон регулярного выражения, чтобы map all user names для этой системы аутентификации в формат, ожидаемый сервером Trino. |
|
Путь к 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.
jwt.io помогает декодировать и проверять JWT.
An article on using RS256 о подписи и проверке JWT с помощью RS256.
Онлайн-генератор JSON web key.
Генератор JSON web key для командной строки.