Перейти к основному содержимому
Версия: 2.0.x

Аутентификация OAuth 2.0

В этом разделе описывается, как включить аутентификацию OAuth 2.0 в Selena.

Начиная с версии v1.5.2, Selena поддерживает аутентификацию клиентского доступа с использованием OAuth 2.0. Вы можете включить аутентификацию OAuth 2.0 через HTTP для Web UI и драйвера JDBC.

Selena использует поток Authorization Code, который обменивает код авторизации на токен. В общем случае поток включает следующие шаги:

  1. Координатор Selena перенаправляет браузер пользователя на сервер авторизации.
  2. Пользователь аутентифицируется на сервере авторизации.
  3. После одобрения запроса браузер перенаправляется обратно на Selena FE с кодом авторизации.
  4. Координатор Selena обменивает код авторизации на токен.

В этом разделе описывается, как вручную создавать и аутентифицировать пользователей с использованием OAuth 2.0 в Selena. Инструкции по интеграции Selena с вашим сервисом OAuth 2.0 с помощью security integration см. в разделе Аутентификация с помощью Security Integration. Подробнее об аутентификации групп пользователей в вашем сервисе OAuth 2.0 см. в разделе Аутентификация групп пользователей.

Предварительные требования

Если вы хотите подключиться к Selena из MySQL-клиента, версия MySQL-клиента должна быть 9.2 или выше. Подробнее см. в официальной документации MySQL.

Создание пользователя с OAuth 2.0

При создании пользователя укажите метод аутентификации как OAuth 2.0 с помощью IDENTIFIED WITH authentication_oauth2 [AS '{xxx}']. {xxx} — это свойства OAuth 2.0 пользователя. Помимо следующего метода, вы можете настроить свойства OAuth 2.0 по умолчанию в файле конфигурации FE. Вам необходимо вручную изменить все файлы fe.conf и перезапустить все FE, чтобы конфигурация вступила в силу. После установки конфигурации FE, Selena будет использовать свойства по умолчанию, указанные в вашем файле конфигурации, и вы можете опустить часть AS '{xxx}'.

Синтаксис:

CREATE USER <username> IDENTIFIED WITH authentication_oauth2 [AS
'{
"auth_server_url": "<auth_server_url>",
"token_server_url": "<token_server_url>",
"client_id": "<client_id>",
"client_secret": "<client_secret>",
"redirect_url": "<redirect_url>",
"jwks_url": "<jwks_url>",
"principal_field": "<principal_field>",
"required_issuer": "<required_issuer>",
"required_audience": "<required_audience>"
}']
СвойствоСоответствующая конфигурация FEОписание
auth_server_urloauth2_auth_server_urlURL авторизации. URL, на который будет перенаправлен браузер пользователя для начала процесса авторизации OAuth 2.0.
token_server_urloauth2_token_server_urlURL конечной точки на сервере авторизации, с которой Selena получает токен доступа.
client_idoauth2_client_idПубличный идентификатор клиента Selena.
client_secretoauth2_client_secretСекрет, используемый для авторизации клиента Selena на сервере авторизации.
redirect_urloauth2_redirect_urlURL, на который будет перенаправлен браузер пользователя после успешной аутентификации OAuth 2.0. Код авторизации будет отправлен на этот URL. В большинстве случаев его необходимо настроить как http://<selena_fe_url>:<fe_http_port>/api/oauth2.
jwks_urloauth2_jwks_urlURL к сервису JSON Web Key Set (JWKS) или путь к локальному файлу в директории conf.
principal_fieldoauth2_principal_fieldСтрока, используемая для идентификации поля субъекта (sub) в JWT. Значение по умолчанию — sub. Значение этого поля должно совпадать с именем пользователя для входа в Selena.
required_issueroauth2_required_issuer(Опционально) Список строк для идентификации издателей (iss) в JWT. JWT считается действительным, только если одно из значений в списке совпадает с издателем JWT.
required_audienceoauth2_required_audience(Опционально) Список строк для идентификации аудитории (aud) в JWT. JWT считается действительным, только если одно из значений в списке совпадает с аудиторией JWT.

Пример:

CREATE USER tom IDENTIFIED WITH authentication_oauth2 AS
'{
"auth_server_url": "http://localhost:38080/realms/master/protocol/openid-connect/auth",
"token_server_url": "http://localhost:38080/realms/master/protocol/openid-connect/token",
"client_id": "12345",
"client_secret": "LsWyD9vPcM3LHxLZfzJsuoBwWQFBLcoR",
"redirect_url": "http://localhost:8030/api/oauth2",
"jwks_url": "http://localhost:38080/realms/master/protocol/openid-connect/certs",
"principal_field": "preferred_username",
"required_issuer": "http://localhost:38080/realms/master",
"required_audience": "12345"
}';

Если вы установили свойства OAuth 2.0 в файлах конфигурации FE, вы можете напрямую выполнить следующий оператор:

CREATE USER tom IDENTIFIED WITH authentication_oauth2;

Подключение из JDBC-клиента с OAuth 2.0

Selena поддерживает протокол MySQL. Вы можете настроить плагин MySQL для автоматического запуска метода входа через браузер.

Пример кода плагина JDBC OAuth2 см. в официальной документации selena-jdbc-oauth2-plugin.

Подключение из MySQL-клиента с OAuth 2.0

Если у вас нет доступа к браузеру в вашей среде (например, при использовании терминала или сервера), вы также можете получить доступ к Selena через нативный MySQL-клиент или драйвер JDBC:

  • При первом подключении к Selena будет возвращен URL.
  • Вам необходимо перейти по этому URL в браузере и завершить аутентификацию.
  • После аутентификации вы сможете взаимодействовать с Selena.