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_url | jwt_jwks_url | JSON Web Key Set (JWKS) 服务的 URL 或 fe/conf 目录下公钥本地文件的路径。 |
principal_field | jwt_principal_field | 用于标识 JWT 中指示主体 (sub ) 的字段的字符串。默认值为 sub 。此字段的值必须与登录 StarRocks 的用户名相同。 |
required_issuer | jwt_required_issuer | (可选)用于标识 JWT 中颁发者 (iss ) 的字符串列表。仅当列表中的一个值与 JWT 颁发者匹配时,JWT 才被认为是有效的。 |
required_audience | jwt_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