基于JWT的身份验证
您可以使用JSON Web Tokens (JWT)将Metabase连接到您的身份提供者以进行身份验证。
身份验证流程
Metabase支持两种可以与JWT一起使用的身份验证流程
- 授权代码流程
- 带有PKCE的授权代码流程
Metabase的身份验证流程是模仿OAuth 2.0定制的工流程。您可以使用带有PKCE的身份验证流程来包含按需生成的随机密钥。
目前,Metabase 支持的唯一算法是 HS256(HMAC + SHA-256)。
基于 JWT 的 SSO 与 Metabase 交互的典型流程
假设您的网站在端口 3000 上运行
- 有人试图查看一个问题,例如,
https://127.0.0.1:3000/question/1-superb-question
。 - 如果该人未登录,Metabase 将将其重定向到
https://127.0.0.1:3000/auth/sso
。 - 保留原始的
/question/1-superb-question
URI,Metabase 将该人重定向到 SSO 提供商(认证应用程序)。 - 该人使用基本表单登录。
- 在登录成功的情况下,您的认证应用程序应向您的 Metabase 端点发送带有令牌和“返回到” URI 的 GET 请求:
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 组的 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版本的文档。