基于JWT的身份验证

基于JWT的身份验证仅在Pro企业计划(自托管和Metabase云)上提供。

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

身份验证流程

Metabase支持两种可以与JWT一起使用的身份验证流程

  • 授权代码流程
  • 带有PKCE的授权代码流程

Metabase的身份验证流程是模仿OAuth 2.0定制的工流程。您可以使用带有PKCE的身份验证流程来包含按需生成的随机密钥。

目前,Metabase 支持的唯一算法是 HS256HMAC + SHA-256)。

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

假设您的网站在端口 3000 上运行

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

启用 JWT 认证

导航到管理区域中的 管理>设置 部分,然后点击 认证 选项卡。在此页面的 JWT 部分中,点击 配置 按钮,您将看到此表单

JWT form

以下是每个设置的说明

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

JWT 签名密钥使用的字符串:用于生成验证 JWT 消息的私钥的字符串。Metabase 和认证应用程序应具有相同的 JWT 签名密钥。

用户属性配置(可选)

您可以使用以下这些设置来填写以将用户属性传递给 Metabase。

  • 电子邮件属性:检索每个 JWT 用户的电子邮件地址的密钥。
  • 名属性:检索每个 JWT 用户的第一个名称的密钥。
  • 姓属性:如果您猜到这是检索每个 JWT 用户的姓氏的密钥,那么您已经非常注意了。

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

配置组映射

您可以使用 JWT 将 Metabase 用户分配到自定义组。

  1. 将组添加到您的 JWT 中:groups: ["group_name"]
  2. 在 Metabase 中,转到管理面板并切换到 设置 > 认证 选项卡。
  3. 点击 JWT 下的 配置 按钮。
  4. 组模式 下,打开 同步组成员资格 开关。
  5. 点击 新建映射 并添加 JWT 组的名称。
  6. 在出现的行中,点击下拉菜单以选择应映射到 Metabase 组的 Metabase 组。 Metabase JWT 组映射
  7. 为要映射的每个组重复此操作。

或者,您可以使用环境变量 MB_JWT_GROUP_MAPPINGS 来定义 JWT 组和 Metabase 组之间的映射。它接受一个 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。

您还可以使用环境变量MB_JWT_GROUP_SYNC来开启或关闭分组同步。

MB_JWT_GROUP_SYNC=true

使用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版本的文档。

想要改进这些文档? 提出更改。