基于 JWT 的认证
您可以使用 JSON Web 令牌 (JWT) 将 Metabase 连接到您的身份提供商,以进行用户认证。
Metabase 基于 JWT 的 SSO 交互典型流程
假设您的网站在 localhost 上的 3000 端口提供服务
- 用户尝试查看某个问题,例如,
http://localhost:3000/question/1-superb-question
。 - 如果用户未登录,Metabase 会将其重定向到
http://localhost:3000/auth/sso
。 - 保留原始的
/question/1-superb-question
URI,Metabase 会将用户重定向到 SSO 提供商(认证应用程序)。 - 用户使用基本表单登录。
- 如果登录成功,您的认证应用程序应向您的 Metabase 端点发出 GET 请求,并附带令牌和“返回”URI:
http://localhost: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 版本的文档。