基于 JWT 的身份验证
基于 JWT 的身份验证仅在 Pro 和 Enterprise 计划(自托管和 Metabase 云)中可用。
您可以使用 JSON Web Tokens (JWT) 将 Metabase 连接到您的身份提供商,以验证人员身份。
身份验证流程
Metabase 支持两种可与 JWT 结合使用的身份验证流程
- 授权码流程
- 带 PKCE 的授权码流程
Metabase 的身份验证流程是模仿 OAuth 2.0 的自定义工作流程。您可以将带 PKCE 的身份验证流程与按需生成的随机密钥结合使用。
目前,Metabase 仅支持 HS256 (HMAC + SHA-256) 算法。
基于 JWT 的 SSO 与 Metabase 交互的典型流程
假设您的站点是 localhost,在端口 3000 上提供服务
- 人员尝试查看问题,例如
https://127.0.0.1:3000/question/1-superb-question
。 - 如果该人员未登录,Metabase 会将其重定向到
https://127.0.0.1:3000/auth/sso
。 - Metabase 保留原始
/question/1-superb-question
URI,将该人员重定向到 SSO 提供商(身份验证应用)。 - 人员使用基本表单登录。
- 如果成功登录,您的身份验证应用应向您的 Metabase 端点发出 GET 请求,其中包含令牌和“返回到”URI:
https://127.0.0.1:3000/auth/sso?jwt=TOKEN_GOES_HERE&return_to=/question/1-superb-question
。 - Metabase 验证 JSON Web 令牌,将该人员登录,然后将该人员重定向到其原始目标
/question/1-superb-question
。
启用 JWT 身份验证
导航到管理区域的 管理>设置 部分,然后单击 身份验证 选项卡。单击此页面 JWT 部分中的 配置 按钮,您将看到此表单
以下是每个设置的细分
JWT 身份提供商 URI: 这是 Metabase 将重定向登录请求的位置。也就是说,这是您的用户通过您的身份提供商登录的位置。
JWT 签名密钥使用的字符串: 用于种子化用于验证 JWT 消息的私钥的字符串。Metabase 和身份验证应用应具有相同的 JWT 签名密钥。
用户属性配置(可选)
这些是您可以填写的其他设置,以将用户属性传递给 Metabase。
- 电子邮件属性: 用于检索每个 JWT 用户的电子邮件地址的密钥。
- 名字属性: 用于检索每个 JWT 用户的名字的密钥。
- 姓氏属性: 如果您猜到这是用于检索每个 JWT 用户的姓氏的密钥,那么您一直都在认真听讲。
您可以通过将属性作为键/值对添加到 JWT 中,将其他用户属性发送到 Metabase。这些属性将在每次登录时同步。
配置群组映射
您可以使用 JWT 将 Metabase 用户分配给自定义群组。
- 将群组添加到您的 JWT:
groups: ["group_name"]
。 - 在 Metabase 中,转到管理面板并切换到 设置 > 身份验证 选项卡。
- 单击 JWT 下方的 配置 按钮。
- 在 群组架构 下,打开 同步群组成员身份 的开关
- 单击 新建映射 并添加 JWT 群组的名称。
- 在出现的行中,单击下拉列表以选择应映射到的 Metabase 群组。
- 对您要映射的每个群组重复此操作。
或者,您可以使用 环境变量 MB_JWT_GROUP_MAPPINGS
定义 JWT 群组和 Metabase 群组之间的映射。它接受一个 JSON 对象,其中键是 JWT 群组,值是 Metabase 群组 ID 列表。例如
MB_JWT_GROUP_MAPPINGS='{"extHR":[7], "extSales":[3,4]}'
其中 extHR
, extSales
是 JWT 群组的名称,3,4,7 是 Metabase 群组的 ID。
您可以在群组页面的 URL 中找到 Metabase 群组 ID,例如 http://your-metabase-url/admin/people/groups/<ID>
。“所有用户”群组的 ID 为 1,“管理员”群组的 ID 为 2。
您还可以使用 环境变量 MB_JWT_GROUP_SYNC
打开或关闭群组同步。
MB_JWT_GROUP_SYNC=true
使用 SSO 创建 Metabase 帐户
付费计划 对每个额外帐户收费。
新的 SSO 登录将自动创建一个新的 Metabase 帐户。
使用外部身份提供商登录创建的 Metabase 帐户没有密码。使用 IdP 注册 Metabase 的人员必须继续使用 IdP 登录 Metabase。
禁用密码登录
避免将自己锁定在 Metabase 之外! 此设置将应用于所有 Metabase 帐户,包括您的 Metabase 管理员帐户。我们建议您保持密码身份验证启用状态。这将保护您在 SSO 出现任何问题时不会被锁定在 Metabase 之外。
要要求人员使用 SSO 登录,请从 管理设置 > 身份验证 禁用密码身份验证。
关于 Azure 的说明
如果您使用的是 Azure,您可能需要使用 Azure AD B2C。请查看他们的 令牌概述。
使用基于 JWT 的身份验证的示例代码
您可以在 SSO 示例存储库 中找到使用 JWT 身份验证的示例代码。
阅读其他 Metabase 版本 的文档。