跳到主要内容
版本: 最新版本-3.5

JSON Web Token 身份验证

本主题介绍如何在 StarRocks 中启用 JSON Web Token 身份验证。

从 v3.5.0 开始,StarRocks 支持使用 JSON Web Tokens 验证客户端访问。

JSON Web Token (JWT) 是一种开放标准 (RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间安全地传输信息作为 JSON 对象。此信息可以被验证和信任,因为它经过数字签名。 JWT 可以使用密钥(使用 HMAC 算法)或使用 RSA 或 ECDSA 的公钥/私钥对进行签名。

本主题介绍如何在 StarRocks 中手动创建用户并使用 JWT 进行身份验证。有关如何使用安全集成将 StarRocks 与 JWT 身份验证集成的说明,请参阅使用安全集成进行身份验证。有关如何使用 JWT 验证用户组的更多信息,请参阅验证用户组

前提条件

如果要从 MySQL 客户端连接到 StarRocks,则 MySQL 客户端版本必须为 9.2 或更高版本。

创建具有 JWT 的用户

创建用户时,通过 IDENTIFIED WITH authentication_jwt [AS '{xxx}'] 将身份验证方法指定为 JWT。 {xxx} 是用户的 JWT 属性。除了以下方法,您还可以在 FE 配置文件中配置默认的 JWT 属性。您需要手动修改所有 fe.conf 文件并重新启动所有 FE 才能使配置生效。设置 FE 配置后,StarRocks 将使用配置文件中指定的默认属性,您可以省略 AS '{xxx}' 部分。

语法

CREATE USER <username> IDENTIFIED WITH authentication_jwt [AS 
'{
"jwks_url": "<jwks_url>",
"principal_field": "<principal_field>",
"required_issuer": "<required_issuer>",
"required_audience": "<required_audience>"
}']
属性对应的 FE 配置描述
jwks_urljwt_jwks_urlJSON Web Key Set (JWKS) 服务的 URL 或 fe/conf 目录下公钥本地文件的路径。
principal_fieldjwt_principal_field用于标识 JWT 中指示主体 (sub) 的字段的字符串。默认值为 sub。此字段的值必须与登录 StarRocks 的用户名相同。
required_issuerjwt_required_issuer(可选)用于标识 JWT 中颁发者 (iss) 的字符串列表。仅当列表中的一个值与 JWT 颁发者匹配时,JWT 才被认为是有效的。
required_audiencejwt_required_audience(可选)用于标识 JWT 中受众 (aud) 的字符串列表。仅当列表中的一个值与 JWT 受众匹配时,JWT 才被认为是有效的。

示例

CREATE USER tom IDENTIFIED WITH authentication_jwt AS
'{
"jwks_url": "https://:38080/realms/master/protocol/jwt/certs",
"principal_field": "preferred_username",
"required_issuer": "https://:38080/realms/master",
"required_audience": "starrocks"
}';

如果您已在 FE 配置文件中设置了 JWT 属性,则可以直接执行以下语句

CREATE USER tom IDENTIFIED WITH authentication_jwt;

使用 JWT 从 MySQL 客户端连接

要使用 JWT 从 MySQL 客户端连接到 StarRocks,您需要启用 authentication_openid-connect_client 插件,并将必要的令牌(使用令牌文件的路径)传递给经过身份验证的映射用户。

语法

mysql -h <hostname> -P <query_port> --authentication-openid-connect-client-id-token-file=<path_to_token_file> -u <username>

示例

mysql -h 127.0.0.1 -P 9030 --authentication-openid-connect-client-id-token-file=/path/to/token/file -u tom