8.4.1.9 Подключаемая аутентификация OpenID Connect
Подключаемая аутентификация OpenID Connect является расширением, включённым в MySQL Enterprise Edition, коммерческий продукт. Чтобы узнать больше о коммерческих продуктах, см. https://www.mysql.com/products/.
MySQL Enterprise Edition поддерживает метод аутентификации, который позволяет пользователям аутентифицироваться на MySQL Server с помощью OpenID Connect, при условии, что соответствующие учетные данные и токены OpenID Connect должным образом сконфигурированы на основе фреймворка OAuth 2.0.
В следующей таблице показаны имена файлов плагина и библиотеки. Название файла может отличаться на вашей системе. Файл должен находиться в каталоге, указанном переменной системы plugin_dir. Сведения об установке см. в разделе Установка подключаемой аутентификации OpenID.
Таблица 8.24 Имена плагинов и библиотек для аутентификации OpenID Connect
| Плагин или файл | Название плагина или файла |
|---|---|
| Плагин на стороне сервера | authentication_openid_connect |
| Плагин на стороне клиента | authentication_openid_connect_client |
| Файл библиотеки |
authentication_openid_connect.so, authentication_openid_connect_client.so
|
Плагин аутентификации OpenID Connect на стороне сервера включен в MySQL Enterprise Edition. Он не включён в дистрибутивы MySQL Community. Плагин на стороне клиента включен во все дистрибутивы, включая дистрибутивы Community. Это позволяет клиентам из любого дистрибутива подключаться к серверу, на котором загружен плагин на стороне сервера.
В следующих разделах содержатся сведения об установке и использовании, специфичные для подключаемой аутентификации OpenID Connect:
Дополнительную информацию об аутентификации плагинами в MySQL см. в разделе 8.2.17, «Подключаемая аутентификация».
Предварительные требования для подключаемой аутентификации OpenID Connect
Для использования подключаемой аутентификации OpenID Connect для MySQL должны быть выполнены следующие предварительные требования:
Пользователь, подключающийся к системе, должен иметь учётную запись в домене поставщика идентификации и иметь средства получения токена.
Администратор должен иметь список поставщиков токенов для поддержки, а также их открытые ключи подписи. Администратор также должен иметь идентификатор пользователя из домена поставщика идентификации.
Процесс и рабочий процесс OpenID Connect
Аутентификация OpenID Connect выполняется по этим шагам, где части на стороне сервера и клиента выполняются с помощью плагинов аутентификации authentication_openid_connect и authentication_openid_connect_client соответственно:
Клиент считывает файл токена идентификации. Например, командная строка клиента mysql использует параметр
authentication-openid-connect-client-id-token-fileс полным путём к файлу токена. Клиент не принимает токен размером более 10 КБ. Каждый коннектор имеет метод для передачи этой информации.Клиент проверяет, является ли соединение между клиентом и сервером безопасным. Безопасными считаются только подключения TLS, сокета и совместной памяти.
Клиент отправляет токен на сервер после проверки, является ли он валидным JSON Web Token (JWT).
Сервер проверяет, является ли соединение между клиентом и сервером безопасным, и получает токен.
-
Сервер декодирует и проверяет токен:
Проверяет, является ли токен валидным JWT.
Заголовки извлекаются с использованием алгоритма шифрования, который использует асимметричный алгоритм RS256.
Платежная нагрузка декодируется, и выполняются проверки для определения, выполнены ли соответствующие критерии для успешного входа в систему.
-
Критерии успешного входа в систему:
Значение утверждения
subтокена идентификации должно быть таким же, как значение пользователя в строке аутентификации.Значение
identity_providerв строке аутентификации должно быть одним из значенийidentity_provider, заданных в конфигурации.Значение утверждения
issтокена идентификации должно быть равно значениюidentity_provider, заданному в конфигурации.Время истечения срока действия токена идентификации должно быть больше текущего времени.
Подпись токена идентификации должна быть проверена с помощью открытого ключа издателя токена идентификации, указанного в параметре
authentication_openid_connect_configuration, заданном администратором.
Аутентификация считается успешной, если все необходимые критерии выполнены, в противном случае аутентификация завершается неудачно, и соответствующая информация записывается в журнал ошибок.
Установка подключаемой аутентификации OpenID
В этом разделе описано, как установить плагин аутентификации OpenID Connect на стороне сервера. Дополнительную информацию об установке плагинов см. в разделе 7.6.1, «Установка и удаление плагинов».
Установите плагин аутентификации OpenID Connect на стороне сервера authentication_openid_connect на MySQL Server. Например, с помощью INSTALL
PLUGIN:
INSTALL PLUGIN authentication_openid_connect SONAME 'authentication_openid_connect.so';
Затем сконфигурируйте параметр сервера MySQL authentication_openid_connect_configuration. Администратор указывает список издателей и соответствующие открытые ключи подписи, используемые для проверки подписи токена идентификации. Это определяется как строка JSON (с префиксом JSON://) или указание на файл JSON (с префиксом file://). При аутентификации принимаются только токены идентификации, выпущенные из списка издателей, указанных администратором. Например:
SET GLOBAL authentication_openid_connect_configuration = "file://full/path/to/file.json";
Файл file.json в этом примере будет похож на:
{
"issuer1": "{\"name\":\"issuer1_formal_name\",\"e\":\"AQAB\",\"use\":\"sig\",\"n\":\"oUriU8GqbRw-avcMn95DGW1cpZR1IoM6L7krfrWvLSSCcSX6Ig117o25Yk7QWBiJpaPV0FbP7Y5-DmThZ3SaF0AXW-3BsKPEXfFfeKVc6vBqk3t5mKlNEowjdvNTSzoOXO5UIHwsXaxiJlbMRalaFEUm-2CKgmXl1ss_yGh1OHkfnBiGsfQUndKoHiZuDzBMGw8Sf67am_Ok-4FShK0NuR3-q33aB_3Z7obC71dejSLWFOEcKUVCaw6DGVuLog3x506h1QQ1r0FXKOQxnmqrRgpoHqGSouuG35oZve1vgCU4vLZ6EAgBAbC0KL35I7_0wUDSMpiAvf7iZxzJVbspkQ\",\"kty\":\"RSA\"}",
"issuer2": "{\"name\":\"issuer2_formal_name\",\"e\":\"AQAB\",\"use\":\"sig\",\"n\":\"oUriU8GqbRw-avcMn95DGW1cpZR1IoM6L7krfrWvLSSCcSX6Ig117o25Yk7QWBiJpaPV0FbP7Y5-DmThZ3SaF0AXW-3BsKPEXfFfeKVc6vBqk3t5mKlNEowjdvNTSzoOXO5UIHwsXaxiJlbMRalaFEUm-2CKgmXl1ss_yGh1OHkfnBiGsfQUndKoHiZuDzBMGw8Sf67am_Ok-4FShK0NuR3-q33aB_3Z7obC71dejSLWFOEcKUVCaw6DGVuLog3x506h1QQ1r0FXKOQxnmqrRgpoHqGSouuG35oZve1vgCU4vLZ6EAgBAbC0KL35I7_0wUDSMpiAvf7iZxzJVbspkQ\",\"kty\":\"RSA\"}"
}
В качестве альтернативы, задайте authentication_openid_connect_configuration непосредственно как строку JSON вместо файла:
SET GLOBAL authentication_openid_connect_configuration = "JSON://{\"issuer1\" : \"{\\\"name\\\":\\\"issuer1_formal_name\\\",\\\"e\\\":\\\"AQAB\\\",\\\"use\\\":\\\"sig\\\",\\\"n\\\":\\\"oUriU8GqbRw-avcMn95DGW1cpZR1IoM6L7krfrWvLSSCcSX6Ig117o25Yk7QWBiJpaPV0FbP7Y5-DmThZ3SaF0AXW-3BsKPEXfFfeKVc6vBqk3t5mKlNEowjdvNTSzoOXO5UIHwsXaxiJlbMRalaFEUm-2CKgmXl1ss_yGh1OHkfnBiGsfQUndKoHiZuDzBMGw8Sf67am_Ok-4FShK0NuR3-q33aB_3Z7obC71dejSLWFOEcKUVCaw6DGVuLog3x506h1QQ1r0FXKOQxnmqrRgpoHqGSouuG35oZve1vgCU4vLZ6EAgBAbC0KL35I7_0wUDSMpiAvf7iZxzJVbspkQ\\\",\\\"kty\\\":\\\"RSA\\\"}\", \"issuer2\": \"{\\\"name\\\":\\\"issuer2_formal_name\\\",\\\"e\\\":\\\"AQAB\\\",\\\"use\\\":\\\"sig\\\",\\\"n\\\":\\\"oUriU8GqbRw-avcMn95DGW1cpZR1IoM6L7krfrWvLSSCcSX6Ig117o25Yk7QWBiJpaPV0FbP7Y5-DmThZ3SaF0AXW-3BsKPEXfFfeKVc6vBqk3t5mKlNEowjdvNTSzoOXO5UIHwsXaxiJlbMRalaFEUm-2CKgmXl1ss_yGh1OHkfnBiGsfQUndKoHiZuDzBMGw8Sf67am_Ok-4FShK0NuR3-q33aB_3Z7obC71dejSLWFOEcKUVCaw6DGVuLog3x506h1QQ1r0FXKOQxnmqrRgpoHqGSouuG35oZve1vgCU4vLZ6EAgBAbC0KL35I7_0wUDSMpiAvf7iZxzJVbspkQ\\\",\\\"kty\\\":\\\"RSA\\\"}\"}";
Одно из имён издателей должно соответствовать значению identity_provider в строке аутентификации, а соответствующее значение ключа name должно совпадать со значением iss в токене идентификации.
Пользователь MySQL сопоставляется с пользователем, управляемым в домене поставщика идентификации, для аутентификации с помощью плагина клиента authentication_openid_connect_client, как показано в примере ниже:
CREATE USER
'username'@'%'
IDENTIFIED WITH
'authentication_openid_connect'
AS
'{"identity_provider" : "idp_name_here", "user" : "user_id_here"}';
Замените idp_name_here именем поставщика идентификации, выбранным администратором, для соответствия одному из разрешённых ключей поставщика идентификации, указанных в конфигурации. Замените user_id_here идентификатором пользователя в домене поставщика идентификации, который должен совпадать со значением поля sub в токене идентификации.
Подключение с клиентом
Клиент с включённым плагином authentication_openid_connect_client передаёт необходимый токен идентификации для аутентификации сопоставленного пользователя MySQL, используя полный путь к файлу токена идентификации, используемый при подключении к серверу MySQL.
Например, командная строка клиента mysql передаёт параметр --authentication-openid-connect-client-id-token-file. Например:
mysql -h hostname --port port --authentication-openid-connect-client-id-token-file=/path/to/token/file -u username
© 2025 Oracle
Licensed under the GPLv2 License.