基于 JWT 的身份验证

基于 JWT 的身份验证仅适用于 专业版企业版 计划(包括自托管和 Metabase 云)。

您可以使用 JSON Web Tokens (JWT) 将 Metabase 连接到您的身份提供商以进行身份验证。

基于 JWT 的 SSO 与 Metabase 交互的典型流程

假设您的站点在端口 3000 上提供 localhost 服务

  1. 用户尝试查看问题,例如 https://:3000/question/1-superb-question
  2. 如果用户未登录,Metabase 会将其重定向到 https://:3000/auth/sso
  3. Metabase 保留原始 URI /question/1-superb-question,将用户重定向到 SSO 提供商(身份验证应用程序)。
  4. 用户使用基本表单登录。
  5. 如果登录成功,您的身份验证应用程序应向您的 Metabase 端点发出 GET 请求,并带上令牌和“返回”URI:https://:3000/auth/sso?jwt=TOKEN_GOES_HERE&return_to=/question/1-superb-question
  6. Metabase 验证 JSON Web Token,登录用户,然后将用户重定向到其原始目的地 /question/1-superb-question

设置 JWT 身份验证

导航到管理区域的 **管理** > **设置** 部分,然后单击 **身份验证 > JWT** 选项卡。

JWT form

以下是每个设置的详细说明

  • JWT 身份提供商 URI:这是 Metabase 重定向登录请求的地方。也就是说,这是您的用户通过您的身份提供商登录的地方。

  • JWT 签名密钥使用的字符串:用于为用于验证 JWT 消息的私钥提供种子的字符串。Metabase 和身份验证应用程序应具有相同的 JWT 签名密钥。

用户属性配置(可选)

这些是您可以填写的额外设置,用于将用户属性传递给 Metabase。

  • 电子邮件属性: 用于检索每个 JWT 用户的电子邮件地址的密钥。
  • 名字属性: 用于检索每个 JWT 用户的名字的密钥。
  • 姓氏属性: 如果您猜到这是用于检索每个 JWT 用户的姓氏的密钥,那么您一直很专心。
  • 组分配属性: 用于检索每个 JWT 用户的组分配的密钥。

您可以通过将属性作为键/值对添加到 JWT 来向 Metabase 发送其他用户属性。这些属性将在每次登录时同步。

配置组映射

您可以使用 JWT 根据用户的属性将 Metabase 用户分配到自定义的 Metabase ,例如,自动将所有具有特定 JWT 属性的用户分配到 Metabase 中的 销售 组。这有助于大规模进行 权限管理

您可以通过 Metabase 的管理界面或通过设置环境变量来配置 JWT 组分配。

在 Metabase 中配置组映射

  1. 向 JWT 添加组:groups: ["group_name"]。属性键(例如 groups)应与 Metabase 中的组分配属性匹配。
  2. 在 Metabase JWT 设置中的 **组同步** 下,打开 **同步组成员资格**
  3. 如果您的 JWT 中的组名称与 Metabase 组名称匹配,它们将自动同步,您无需手动设置映射。

  4. 否则,单击 **新建映射** 并添加 JWT 组的名称。
  5. 在出现的行中,单击下拉菜单选择此应映射到的 Metabase 组。Metabase JWT 组映射
  6. 为要映射的每个组重复此操作。

通过环境变量配置组映射

您可以使用以下环境变量来配置 JTW 组映射,而不是在 Metabase 的管理设置中配置它们

  • MB_JWT_ATTRIBUTE_GROUPS 用于指定检索 JWT 用户组的密钥;

  • MB_JWT_GROUP_SYNC 用于开启或关闭组同步(默认关闭)。

    MB_JWT_GROUP_SYNC=true
    
  • MB_JWT_GROUP_MAPPINGS 用于配置组映射。它接受一个 JSON 对象,其中键是 JWT 组,值是 Metabase 组 ID 列表。例如

    MB_JWT_GROUP_MAPPINGS='{"extHR":[7], "extSales":[3,4]}'
    

    其中 extHRextSales 是 JWT 组的名称,3、4、7 是 Metabase 组的 ID。

    您可以在组页面的 URL 中找到 Metabase 组 ID,例如 http://your-metabase-url/admin/people/groups/<ID>。“所有用户”组的 ID 为 1,“管理员”组的 ID 为 2。

如果未指定组映射,Metabase 将按名称匹配组

如果您未在 Metabase 的管理设置中或通过 MB_JWT_GROUP_MAPPINGS 环境变量指定任何组映射,则 Metabase 将尝试根据匹配的名称将 Metabase 组分配给用户。如果 JWT 组属性数组中的组名称与 Metabase 组名称完全匹配(例如,两者都是 "Sales"),则将自动映射这些组。

如果您手动添加组映射,Metabase 将不会尝试按名称匹配组。

使用 SSO 创建 Metabase 账户

付费计划 会对每个额外的账户收费

新的 SSO 登录将自动创建一个新的 Metabase 账户。

使用外部身份提供商登录创建的 Metabase 账户没有密码。使用 IdP 注册 Metabase 的用户必须继续使用 IdP 登录 Metabase。

禁用密码登录

避免将自己锁定在 Metabase 之外! 此设置将应用于所有 Metabase 账户,包括您的 Metabase 管理账户。我们建议您保持密码身份验证启用。这将防止您在 SSO 出现任何问题时被锁定在 Metabase 之外。

要要求用户使用 SSO 登录,请从 **管理设置** > **身份验证** 中禁用密码身份验证。

Password disable

关于 Azure 的说明

如果您使用的是 Azure,您可能需要使用 Azure AD B2C。请查看他们的 令牌概述

使用基于 JWT 身份验证的示例代码

您可以在 SSO 示例存储库 中找到使用 JWT 身份验证的示例代码。

阅读其他版本的 Metabase 的文档。

这有帮助吗?

感谢您的反馈!
想要改进这些文档? 提出修改建议。
© . This site is unofficial and not affiliated with Metabase, Inc.