SSO 身份验证
通过 Okta 单点登录(SSO)访问 GreptimeDB 企业版 Dashboard。 用户使用 Okta 账号登录,数据库访问范围由 GreptimeDB 中的权限和 ACL 控制。 密码登录与 SSO 可以同时使用。
版本兼容性
本文适用于 Nightly。请使用支持 SSO 的 GreptimeDB 企业版和 Dashboard, 历史构建可能不支持以下配置。
前置条件
- 在 standalone server 或每个对外服务的 Frontend 上启用
企业版内置用户 Provider
greptime_ee_user_provider。 此方案不使用 LDAP 或 static 用户 Provider。 - 使用支持 SSO 的 Dashboard;若部署 dashboard-apiserver,其版本也需要支持 Bearer 认证。
- 通过 HTTPS 访问 Dashboard。浏览器和 GreptimeDB 均应能够通过可信 HTTPS 访问 Okta。
- 具备创建 Okta 应用、分配用户或用户组的权限。
配置 Okta
创建 OIDC Single-Page Application,使用以下设置:
| 配置项 | 取值 |
|---|---|
| 授权类型 | Authorization Code + PKCE。 |
| 客户端认证 | 在 General → Client Credentials 中选择 Client authentication = None,不配置 client secret。 |
| Issuer | org URL,例如 https://your-org.okta.com,不是 /oauth2/default。 |
| Client ID | 复制应用的 OAuth client ID。 |
| 登录回调 URI | <Dashboard origin>/dashboard/auth/callback,协议、主机、端口和路径必须精确匹配。 |
| 登出回调 URI | <Dashboard origin>/dashboard/auth/login,按需配置 Trusted Origins。 |
| 用户名映射 | 保留应用原生 userName 映射;如需调整,修改 App Profile Mapping。 |
| 用户分配 | 仅分配允许访问数据库的用户或组。 |
例如,Dashboard 地址为 https://dashboard.example.com/dashboard/ 时,登录回调 URI
应为 https://dashboard.example.com/dashboard/auth/callback。
此方案无需自定义 Authorization Server、claim 或 JWKS URL。详细设置参阅 Okta OIDC 应用设置。
配置 GreptimeDB
在 standalone 或 Frontend 配置中加入以下内容,将 issuer 和 client ID 替换为实际值:
user_provider = "greptime_ee_user_provider:"
[[plugins]]
jwt_auth.issuer = "https://your-org.okta.com"
jwt_auth.client_id = "your-oidc-app-client-id"
- 顶层
user_provider放在[http]、[[plugins]]等所有 TOML 表段之前。 保留末尾的:,表示启用 Provider 但不读取账号初始化文件,不会删除已有用户。 - 同一进程只配置一个
jwt_auth插件。此方案不要添加secret、public_key、jwks_url、jwks_ca_cert_path、audience、algorithm或 JWKS 刷新选项。 - 分布式部署需要配置每个对外服务的 Frontend,而不是 Metasrv 或 Datanode; 单机部署配置 standalone 进程。
- 若部署已通过环境变量或启动参数启用 Provider,避免重复配置导致冲突。
重启相关进程或滚动更新 Frontend,并确认每个副本就绪。仅修改 ConfigMap 不会让运行中的进程重新加载配置。
可选配置及默认值
将可选配置加入同一个 [[plugins]] 条目:
| 配置项 | 默认值 | 用法 |
|---|---|---|
jwt_auth.username_claim | "preferred_username" | Okta 提供的用户名字段;使用应用原生用户名映射时保留默认值。 |
jwt_auth.scopes | ["openid", "profile", "email"] | 登录请求的 scopes,必须包含 openid。 |
jwt_auth.display_name | "SSO" | 登录按钮名称,例如 "Okta"。 |
jwt_auth.auto_provision | false | 是否在首次 SSO 登录时创建缺失用户。 |
jwt_auth.auto_provision_privileges | [] | 新用户的初始权限;自动开户时必填,不能包含 Admin。 |
jwt_auth.auto_provision_databases | [] | 新用户可访问的数据库;自动开户时必填。 |