Настройка OAUTH2 для авторизации в Trino

http-server.https.enabled=true
http-server.https.port=8443
http-server.https.keystore.path=etc/keystore.jks
http-server.https.keystore.key=changeit
http-server.authentication.type=OAUTH2,PASSWORD
http-server.authentication.oauth2.issuer=https://isso-dev.company.com/auth/realms/rl
http-server.authentication.oauth2.client-id=trino-test
http-server.authentication.oauth2.client-secret=iddqd
http-server.authentication.oauth2.scopes=openid,profile,email
http-server.authentication.oauth2.audience=trino-test
http-server.authentication.oauth2.user-mapping.pattern=(.*)
http-server.authentication.oauth2.principal-field=preferred_username

Подключение к Trino с OAUTH2

JDBC

Необходимо установить externalAuthentication свойство в true. После этого в том же бобре можно просто скипнуть ввод логина и пароля. Откроется бразуер.

CLI

Добавляем ключ --external-authentication.

./trino-cli-477 --server https://localhost:8443 --insecure --external-authentication --user maksim

Получение токена и авторизация с ним

CLIENT_ID="trino-test"
CLIENT_SECRET="A2pFdsyKpxwhgX79WGSsXBmjraTLYTZd"
ISSUER_URL="https://isso-dev.company.com/auth/realms/rl"
REDIRECT_URI="https://localhost:8443/callback"
TRINO_URL="https://localhost:8443"
 
STATE=$(openssl rand -hex 16)
AUTH_URL="${ISSUER_URL}/protocol/openid-connect/auth?response_type=code&client_id=${CLIENT_ID}&redirect_uri=${REDIRECT_URI}&scope=openid%20profile%20email&state=${STATE}"
 
echo "1. Откройте этот URL в браузере и авторизуйтесь:"
echo "$AUTH_URL"
echo ""
echo "2. После авторизации вы будете перенаправлены на localhost:8080/callback"
echo "3. Скопируйте параметр 'code' из URL"
echo "4. Введите код авторизации:"
read -p "Authorization code: " AUTH_CODE
 
if [ -z "$AUTH_CODE" ]; then
    echo "Код авторизации не введен. Выход."
    exit 1
fi
 
echo ""
echo "Обмениваем код на токен..."
 
# Обмениваем код на токен
TOKEN_RESPONSE=$(curl -s -X POST \
  "${ISSUER_URL}/protocol/openid-connect/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=authorization_code" \
  -d "client_id=${CLIENT_ID}" \
  -d "client_secret=${CLIENT_SECRET}" \
  -d "code=${AUTH_CODE}" \
  -d "redirect_uri=${REDIRECT_URI}")
 
# Извлекаем токены из ответа
ACCESS_TOKEN=$(echo $TOKEN_RESPONSE | jq -r '.access_token')
REFRESH_TOKEN=$(echo $TOKEN_RESPONSE | jq -r '.refresh_token')
 
echo "export TRINO_ACCESS_TOKEN=\"$ACCESS_TOKEN\""
echo "trino --server $TRINO_URL --access-token \$TRINO_ACCESS_TOKEN"