Аутентификация
Система поддерживает аутентификацию запросов по авторизационным токенам (JSON Web Token, также JWT).
Если аутентификация включена, каждый запрос должен содержать авторизационный токен. Система проверяет предоставленный авторизационный токен и исполняет запрос, только если токен корректен и достоверен, а отправитель запроса имеет необходимые полномочия.
После проверки авторизационного токена его значение sub
записывается в лог Prostore как часть идентификатора запроса. Это позволяет при необходимости сопоставить запросы с пользователями и внешними системами, отправившими эти запросы.
JVM-метрики, а также метод /swagger-ui доступны без аутентификации.
Система проверяет авторизационные токены, но не создает их, как и публичные ключи. Для создания публичных ключей и авторизационных токенов можно использовать любой авторизационный сервис, поддерживающий стандарт JWT, например Keycloak.
Включение аутентификации
Чтобы включить аутентификацию запросов для ноды, задайте в конфигурации этой ноды путь к API-методу авторизационного сервиса, возвращающему информацию о публичных ключах. Эта информация будет использоваться нодой для проверки авторизационных токенов. Путь задается с помощью параметра AUTH_JWKS_URI
.
Передача авторизационного токена
При отправке запроса по JDBC авторизационный токен должен быть передан как пароль пользователя. В качестве имени пользователя необходимо указать jwt
.
Инструкции по настройке подключения в SQL-клиенте доступны в разделе Подключение с помощью SQL-клиента.
При отправке запроса по REST API авторизационный токен должен быть передан в заголовке типа Authorization
после ключевого слова Bearer
, как показано в примере ниже.
curl -X 'POST' \
'http://localhost:9090/api/v1/datamarts/query?format=json' \
-H 'x-request-id: ee7c7570-1eec-11ed-861d-0242ac120002' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'
-d '{
"query": "SELECT st.id, st.category, s.product_code FROM marketing.stores AS st INNER JOIN marketing_new.sales AS s ON st.id = s.store_id DATASOURCE_TYPE = '\''adb'\''",
"queryId": "12345"
}'
Добавление и обновление публичных ключей
Кэш публичных ключей, хранящийся на ноде, автоматически обновляется при каждом старте сервера ноды.
Чтобы добавить или обновить кэш публичных ключей без рестарта сервера ноды, выполните CHECK_JWKS.
Порядок проверки авторизационного токена
Нода проверяет авторизационный токен в следующем порядке:
- Декодирует токен и получает доступ к данными токена: подписи, алгоритму подписи, идентификатору публичного ключа и другим данным.
- Находит в кэше публичный ключ с соответствующим идентификатором и с его помощью проверяет подпись токена.
- Проверяет параметры токена: поля
exp
,nbf
иiat
и другие. - Отклоняет запрос, если токен не прошел проверку по любому из параметров.