基于 JWT 的身份验证

JWT 身份验证仅在 ProEnterprise 计划中可用(包括自托管和 Metabase Cloud)。

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

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

假设您的网站在本地主机上运行,端口为 3000

  1. 用户尝试查看一个问题,例如:https://:3000/question/1-superb-question
  2. 如果用户未登录,Metabase 会将其重定向到 https://:3000/auth/sso
  3. Metabase 会保留原始的 /question/1-superb-question URI,并将用户重定向到 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 身份验证

导航到管理员区域的 **Admin** > **Settings** 部分,然后点击 **Authentication > JWT** 选项卡。

JWT form

以下是每个设置的明细

  • JWT Identity Provider URI:Metabase 将在此处重定向登录请求。也就是说,您的用户将在此处通过您的身份提供商登录。

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

用户属性配置(可选)

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

  • Email attribute: 用于检索每个 JWT 用户的电子邮件地址的键。
  • First name attribute: 用于检索每个 JWT 用户名字的键。
  • Last name attribute: 如果您猜到这是检索每个 JWT 用户姓氏的键,那么您就一直都很专注。
  • Group assignment attribute: 用于检索每个 JWT 用户的组分配的键。

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

配置组映射

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

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

在 Metabase 中配置组映射

  1. 将组添加到您的 JWT:groups: ["group_name"]。属性键(例如 groups)应与 Metabase 中的 **Group assignment attribute** 匹配。
  2. 在 Metabase JWT 设置中,在 **Group Sync** 下,切换 **Synchronize Group Memberships**
  3. 如果 JWT 中的组名与 Metabase 组名匹配,它们将自动同步,您无需手动设置映射。

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

通过环境变量配置组映射

您可以使用以下环境变量来配置 JTW 组映射,而不是在 Metabase 的 Admin 设置中进行配置。

  • 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 的 Admin 设置中或通过 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 登录,请在 **Admin settings** > **Authentication** 中禁用密码身份验证。

Password disable

关于 Azure 的注意事项

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

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

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

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

这有帮助吗?

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