使用 Keycloak 的 SAML

Keycloak 是一个开源平台,可用作用户目录来保存用户数据,同时充当单点登录的身份提供商 (IdP)。

  1. 在 Keycloak 中设置 SAML (身份提供商)。
  2. 在 Metabase 中设置 SAML (服务提供商)。

更多信息,请查看我们的 SAML 身份验证指南。

在 Keycloak 控制台中操作

  1. 前往 Keycloak 管理控制台并以管理员身份登录。
  2. 管理 (Manage) > 用户 (Users) 创建用户。您需要填写电子邮件、名字和姓氏字段。
  3. 创建至少一名用户后,**用户 (Users)** 页面顶部将出现导航选项卡。前往 **凭据 (Credentials)** 为您的用户设置密码。
    • 关闭 **临时 (Temporary)** 开关。
    • 点击 **设置密码 (Set Password)** 保存更改。
  4. 管理 (Manage) > 客户端 (Clients) > 创建 (Create) 创建新的 SSO 客户端

    • 客户端 ID (Client ID):输入小写的 metabase
    • 客户端类型 (Client type):从下拉菜单中选择 SAML
    • 点击 **下一步 (Next)**。
    • 有效的重定向 URI (Valid Redirect URIs):您的 Metabase 实例的托管 URL,后跟斜杠 (/) 和星号 (*)。例如,如果您在本地托管 Metabase 于 http://localhost:3000,则 URL 将是 http://localhost:3000/*
    • 主页 URL (Home URL):在您的 Metabase 中,前往 **管理设置 (Admin settings)** > **身份验证 (Authentication)** > **SAML**。您将在“IdP 应重定向到的 URL”字段中找到您的主页 URL。
    • 点击 **保存 (Save)**。
  5. (可选,但在测试环境上建议) 禁用 SSO 客户端的密钥签名。请参阅 SSO 请求签名设置

    • 点击 **密钥 (Keys)** 选项卡。
    • 需要客户端签名 (Client signature required):关闭。
  6. 为 SSO 客户端映射用户属性。
  7. 配置 (Configure) > 领域设置 (Realm Settings) 配置服务提供商 (Metabase)。
    • 从 **端点 (Endpoints)** 中,选择“SAML 2.0 身份提供商元数据”。
    • 一个 XML 文件将在新选项卡中打开。
    • 保留此文件作为参考,我们将在下一节中使用它来配置 Metabase。

将字段从 Keycloak 映射到 Metabase

  1. 前往您的 Metabase **管理设置 (Admin settings)** > **身份验证 (Authentication)** > **SAML**。
  2. 根据上面第 7 步的 XML 文件
    • SAML 身份提供商 URL (SAML Identity Provider URL):插入以下字符串后出现的 URL:Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location=
    • SAML 身份提供商颁发者 (SAML Identity Provider Issuer):插入 entityID= 后出现的 URL。
    • SAML 身份提供商证书 (SAML Identity Provider Certificate):输入 <X509Certificate> 标签后面出现的长字符串。插入此字符串时请小心:如果添加或遗漏任何字母或特殊字符,设置将无法生效。
    • SAML 应用程序名称 (SAML Application Name)metabase
  3. 点击 **保存更改 (Save Changes)**。
  4. 检查页面顶部的 **SAML 身份验证 (SAML Authentication)** 是否已开启。

将 Keycloak 中的用户属性映射到 Metabase

Keycloak 默认可以导入四个用户属性:姓名、姓氏、电子邮件和角色。

假设我们希望电子邮件、姓名和姓氏在客户端 (Metabase) 和身份验证服务器 (Keycloak) 之间传递。

  1. 从控制台右侧的复选框中选择“X500 email”、“X500 givenName”和“X500 surname”。
  2. 点击 **添加所选 (Add Selected)**。
  3. 点击每个属性旁边的 **编辑 (Edit)** 并进行以下更改
    • SAML 属性名称 (SAML Attribute Name):Metabase 期望接收的名称。
    • SAML 属性名称格式 (SAML Attribute NameFormat):从下拉菜单中选择“Basic”。

您可以从 Metabase **管理设置 (Admin settings)** > **身份验证 (Authentication)** > **SAML** > **属性 (Attributes)** 编辑属性值。

配置 Keycloak 和 Metabase 之间的群组映射

您可以配置 Metabase 根据 Keycloak 群组自动将人员分配到 Metabase 群组。

在 Keycloak 中设置群组映射

在您的 Keycloak 客户端中

  1. 点击 **客户端范围 (Client Scopes)** 选项卡
  2. 点击已经创建的 metabase-dedicated 客户端范围。
  3. 点击 **添加映射器 (Add Mapper)** > “**按配置 (By Configuration)**”。
  4. 选择 **群组列表 (Group list)**。
  5. 将属性名称更改为 member_of
  6. 取消选择使用“完整群组路径”的选项(这样以后在 Metabase 中配置会更容易)。
  7. 点击 **保存 (Save)**。

在 Metabase 中设置群组映射

  1. 在管理设置中,前往 **身份验证 (Authentication)** > **SAML**。
  2. 在 SAML 设置中,开启 **同步群组成员资格 (Synchronize Group Memberships)**。
  3. 对于每个 Keycloak 群组,设置一个新的映射到 Metabase 群组。

    目前,Keycloak 群组在 Metabase 中显示时,群组名称前会加上斜杠字符(“/”)。例如,Keycloak 中名为 sales 的群组在 Metabase 中会显示为 /sales

  4. 在 **群组属性名称 (Group attribute name)** 中,输入 member_of(您 Keycloak 配置中包含群组列表的属性名称)。

    SAML 问题故障排除

有关常见问题,请参阅 SAML 故障排除

阅读 Metabase 其他版本的文档。

© . All rights reserved.