vsql_oauth2 让账户用 JWT 而不是密码登录。扩展根据从 JWKS 端点获取的
密钥或一个静态公钥验证令牌的签名,检查令牌尚未过期,并把令牌中的某个
声明映射到一个 VillageSQL 账户。您的身份提供商仍然是唯一签发凭据的
地方。
安装
如果您使用安装脚本、Docker 镜像或发行版压缩包安装了 VillageSQL,vsql_oauth2.veb 已经位于服务器的 lib/veb/ 目录中。
用一条语句将它安装到服务器中:
新增内容
它添加的是一个认证插件,而不是 SQL 函数。创建账户时指定该插件, 该账户随后就通过出示令牌来认证:username_claim 中的声明(默认为 sub)提供该名称。当它的值是
analyst 时,上面的语句就足够了。当它指定其他名称(例如电子邮件
地址)时,请同时创建该账户,并让发起连接的账户代理到它:
ACCOUNT LOCK 阻止任何人直接以 alice@example.com 登录,而代理授权
对锁定的账户仍然有效。运行 validate_password 的服务器拒绝创建没有
密码的账户,无论是否锁定,并回答
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements。在这种情况下,请给该账户设置一个没有人持有的密码。
没有代理授权时,登录会被拒绝并报
ERROR 6126 (HY000): Access denied for user 'oidc_user'@'localhost', missing proxy privilege.
其余全部是配置。
RSA 签名接受 RS256、RS384 和 RS512,ECDSA 接受 ES256、ES384 和 ES512。
用
SET PERSIST 写入的设置在重启后仍然保留,但 UNINSTALL EXTENSION
会删除它。卸载并重新安装后,每个设置都会恢复默认值,重启也不会
恢复旧值。状态变量
另请参阅
- MySQL 中的 JWT 认证 — 完整的登录示例、声明映射,以及被拒绝的令牌为何看起来像密码错误
- 管理扩展 — 扩展设置如何读取和写入
- 预览能力 — 预览标志开启了什么,以及它承诺了什么
- 可用扩展 — 完整目录
- villagesql/vsql-oauth2 — 源代码、完整的提供商设置示例和已知限制