OAuth 2.0 身份验证
本主题介绍如何在 StarRocks 中启用 OAuth 2.0 身份验证。
从 v3.5.0 版本开始,StarRocks 支持使用 OAuth 2.0 验证客户端访问。 您可以为 Web UI 和 JDBC 驱动程序启用基于 HTTP 的 OAuth 2.0 身份验证。
StarRocks 使用 授权码 流程,该流程将授权码交换为令牌。 一般来说,该流程包括以下步骤
- StarRocks Coordinator 将用户的浏览器重定向到授权服务器。
- 用户从授权服务器进行身份验证。
- 请求获得批准后,浏览器将重定向回带有授权码的 StarRocks FE。
- StarRocks Coordinator 将授权码交换为令牌。
本主题介绍如何在 StarRocks 中手动创建用户并使用 OAuth 2.0 进行身份验证。 有关如何使用安全集成将 StarRocks 与您的 OAuth 2.0 服务集成的说明,请参阅使用安全集成进行身份验证。 有关如何在 OAuth 2.0 服务中验证用户组的更多信息,请参阅验证用户组。
前提条件
如果要从 MySQL 客户端连接到 StarRocks,则 MySQL 客户端版本必须为 9.2 或更高版本。 有关更多信息,请参阅MySQL 官方文档。
创建具有 OAuth 2.0 的用户
创建用户时,通过IDENTIFIED WITH authentication_oauth2 [AS '{xxx}']
将身份验证方法指定为 OAuth 2.0。 {xxx}
是用户的 OAuth 2.0 属性。 除了以下方法外,您还可以在 FE 配置文件中配置默认的 OAuth 2.0 属性。 您需要手动修改所有fe.conf文件并重新启动所有 FE 才能使配置生效。 设置 FE 配置后,StarRocks 将使用您的配置文件中指定的默认属性,您可以省略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_url | oauth2_auth_server_url | 授权 URL。 用户的浏览器将被重定向到的 URL,以便开始 OAuth 2.0 授权过程。 |
token_server_url | oauth2_token_server_url | 授权服务器上 StarRocks 从中获取访问令牌的端点的 URL。 |
client_id | oauth2_client_id | StarRocks 客户端的公共标识符。 |
client_secret | oauth2_client_secret | 用于通过授权服务器授权 StarRocks 客户端的密钥。 |
redirect_url | oauth2_redirect_url | OAuth 2.0 身份验证成功后,用户的浏览器将被重定向到的 URL。 授权码将发送到此 URL。 在大多数情况下,需要将其配置为http://<starrocks_fe_url>:<fe_http_port>/api/oauth2 。 |
jwks_url | oauth2_jwks_url | JSON Web Key Set (JWKS) 服务的 URL 或conf 目录下本地文件的路径。 |
principal_field | oauth2_principal_field | 用于标识指示 JWT 中主体 (sub ) 的字段的字符串。 默认值为sub 。 该字段的值必须与登录 StarRocks 的用户名相同。 |
required_issuer | oauth2_required_issuer | (可选) 用于标识 JWT 中颁发者 (iss ) 的字符串列表。 仅当列表中的一个值与 JWT 颁发者匹配时,JWT 才被认为是有效的。 |
required_audience | oauth2_required_audience | (可选) 用于标识 JWT 中受众 (aud ) 的字符串列表。 仅当列表中的一个值与 JWT 受众匹配时,JWT 才被认为是有效的。 |
示例
CREATE USER tom IDENTIFIED WITH authentication_oauth2 AS
'{
"auth_server_url": "https://:38080/realms/master/protocol/openid-connect/auth",
"token_server_url": "https://:38080/realms/master/protocol/openid-connect/token",
"client_id": "12345",
"client_secret": "LsWyD9vPcM3LHxLZfzJsuoBwWQFBLcoR",
"redirect_url": "https://:8030/api/oauth2",
"jwks_url": "https://:38080/realms/master/protocol/openid-connect/certs",
"principal_field": "preferred_username",
"required_issuer": "https://:38080/realms/master",
"required_audience": "12345"
}';
如果您已在 FE 配置文件中设置 OAuth 2.0 属性,您可以直接执行以下语句
CREATE USER tom IDENTIFIED WITH authentication_oauth2;
通过 OAuth 2.0 从 JDBC 客户端连接
StarRocks 支持 MySQL 协议。 您可以自定义 MySQL 插件以自动启动浏览器登录方法。
有关 JDBC OAuth2 插件的示例代码,请参阅starrocks-jdbc-oauth2-plugin的官方文档。
通过 OAuth 2.0 从 MySQL 客户端连接
如果您的环境(例如使用终端或服务器)无法访问浏览器,您还可以通过本机 MySQL 客户端或 JDBC 驱动程序访问 StarRocks
- 首次连接到 StarRocks 时,将返回一个 URL。
- 您需要在浏览器上访问此 URL 并完成身份验证。
- 身份验证后,您可以与 StarRocks 交互。