使用 Okta 的 SAML

Okta SAML 认证仅在 专业版 (Pro)企业版 (Enterprise) 计划中提供(包括自托管和 Metabase 云版)。

  1. 在 Metabase 中启用基于 SAML 的 SSO
  2. 在 Okta 中设置 SAML.
  3. 在 Metabase 中设置 SAML.

您还可以选择性地配置群组映射,以自动将 Okta 用户分配到 Metabase 群组。

有关 SAML 的一般信息,请参阅SAML 认证

在 Metabase 中启用基于 SAML 的 SSO

在管理区域的 管理>设置 部分,进入 认证 选项卡,然后点击 SAML 下的 设置

您将看到一个 SAML 配置表单,如下所示

SAML form

您需要使用此表单中的信息来在 Okta 中设置 SAML。

在 Okta 中设置 SAML

在 Metabase 中配置 SAML 认证之前,您需要在 Okta 中创建一个新的 SAML 应用集成。

在 Okta 中创建应用集成

在 Okta 管理 控制台中,创建一个新的 SAML 应用集成以与 Metabase 一起使用。

配置 Okta SAML 设置

要配置 Okta 应用集成与 Metabase 的连接,您需要使用在 Metabase 管理面板 > 认证 > SAML 部分找到的信息。

通用设置

Okta SAML Metabase SAML
单点登录 URL IdP 应重定向到的 URL。这是您的 Metabase 站点 URL – 它应该以 https:// 开头,并以 /auth/sso 结尾。
受众 URI (SP 实体 ID) SAML 应用程序名称(默认为“Metabase”)

属性声明

在 Okta 应用程序 SAML 设置的 属性声明(可选) 部分,创建以下属性声明

  • 电子邮件地址
  • 名字
  • 姓氏

尽管 Okta 表示这些是可选的,但 Metabase 需要它们。Okta 将在认证期间把这些属性传递给 Metabase,以便自动将用户登录到 Metabase。

名称
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress user.email
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname user.firstName
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname user.lastName

Okta 中的属性声明名称应与 Metabase 中的属性名称匹配(名称区分大小写)。如果您想在 Okta 应用配置中使用非默认属性名称,您还需要在 Metabase 管理面板 > 认证 > SAML 中更改属性字段的名称。

确保用户无法编辑其电子邮件地址属性。为了让用户登录您的 Metabase(或首次登录时创建 Metabase 账户),您的 IdP 会将电子邮件地址属性传递给 Metabase。如果用户可以更改电子邮件地址属性,他们可能会访问非其本人的 Metabase 账户。

Okta 断言示例

您可以点击 预览 SAML 断言 来查看 Okta 生成的 XML 文件。它应该看起来像这样

<saml2:Assertion
    xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" ID="id4170618837332381492734749" IssueInstant="2019-03-27T17:56:11.067Z" Version="2.0">
    <saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://www.okta.com/Issuer</saml2:Issuer>
    <saml2:Subject>
        <saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">userName</saml2:NameID>
        <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
            <saml2:SubjectConfirmationData NotOnOrAfter="2019-03-27T18:01:11.246Z" Recipient="https://metabase.mycompany.com/auth/sso"/>
        </saml2:SubjectConfirmation>
    </saml2:Subject>
    <saml2:Conditions NotBefore="2019-03-27T17:51:11.246Z" NotOnOrAfter="2019-03-27T18:01:11.246Z">
        <saml2:AudienceRestriction>
            <saml2:Audience>my-metabase-app</saml2:Audience>
        </saml2:AudienceRestriction>
    </saml2:Conditions>
    <saml2:AuthnStatement AuthnInstant="2019-03-27T17:56:11.067Z">
        <saml2:AuthnContext>
            <saml2:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml2:AuthnContextClassRef>
        </saml2:AuthnContext>
    </saml2:AuthnStatement>
    <saml2:AttributeStatement>
        <saml2:Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
            <saml2:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">
              Cam
            </saml2:AttributeValue>
        </saml2:Attribute>
        <saml2:Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
            <saml2:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">
              Saul
            </saml2:AttributeValue>
        </saml2:Attribute>
        <saml2:Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
            <saml2:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">
              cam@metabase.com
            </saml2:AttributeValue>
        </saml2:Attribute>
    </saml2:AttributeStatement>
</saml2:Assertion>

在 Metabase 中设置 SAML

在 Okta 中设置好 SAML 应用后,您需要在 Metabase 中配置 SAML。您需要 Okta 提供一些信息

  1. 在 Okta 中,进入您的 Metabase 应用集成页面。
  2. 进入 登录 选项卡。
  3. 点击 查看 SAML 设置说明

使用 Okta SAML 说明中的信息填写 Metabase SAML 表单,路径为 管理面板 > 认证 > SAML

Metabase SAML Okta SAML
SAML 身份提供商 URL 身份提供商单点登录 URL
SAML 身份提供商证书 X.509 证书*
SAML 身份提供商颁发者 身份提供商颁发者

*请确保包含任何页眉和页脚注释,例如 ---BEGIN CERTIFICATE------END CERTIFICATE---

配置群组映射

您可以配置 Metabase,使其在用户登录时自动将他们分配到 Metabase 群组。您需要创建一个 SAML 属性声明,该声明将群组信息传递给 Metabase,然后配置 Metabase 以读取此属性并将其内容映射到 Metabase 群组。

您可以使用以下任一方式

使用用户配置文件属性分配群组

您可以创建一个自定义用户配置文件属性,并为每个用户填充其 Metabase 群组。

  1. 在 Okta 配置文件编辑器中,创建一个新的用户配置文件属性,名为 metabaseGroups,它可以是 stringstring array 类型。 新用户配置文件属性
  2. 对于 Okta 中的每个用户,使用其 Metabase 群组填充 metabaseGroups 属性。

    Metabase groups attribute

    我们建议您在 Okta 中使用的群组名称与在 Metabase 中使用的名称保持一致。

    Metabase 群组不必与 Okta 用户群组对应。如果您想使用 Okta 用户群组来设置 Metabase 群组,请参阅将 Okta 用户群组映射到 Metabase 群组

    您的 Okta 账户必须启用 SAML_SUPPORT_ARRAY_ATTRIBUTES,因为 Metabase 期望 Okta 将属性作为数组传递。如果您的 Okta 账户较旧,您可能需要联系 Okta 支持以启用 SAML_SUPPORT_ARRAY_ATTRIBUTES

  3. 在 Metabase 应用集成的 Okta SAML 设置中,添加一个新的属性声明 MetabaseGroupName,其值为 user.metabaseGroups(您刚刚创建的配置文件属性)

    New attribute statement referencing the attribute

  4. Metabase SAML 设置
  • 开启 同步群组成员资格
  • 对于您添加到 Okta 用户的每个群组,设置一个新的映射到 Metabase 群组。
  • 群组属性名称 中,输入 MetabaseGroupName(SAML 属性声明的名称)。

    Metabase group mapping

将 Okta 用户群组映射到 Metabase 群组

  1. 创建与 Metabase 群组对应的 Okta 用户群组,并将其分配给 Okta 用户。
  2. 在 Okta 的 Metabase 应用集成的 SAML 设置中,添加一个新的属性声明 MetabaseGroupName,将类型设置为“Basic”,值设置为

    Arrays.flatten(getFilteredGroups({"groupID1", "groupID2"}, "group.name", 100))
    

    其中 {"groupId1", "groupId2"} 中的群组 ID 是您希望映射到 Metabase 群组的群组。您可以在群组页面的 URL 中找到 Okta 群组 ID:https://your-okta-url.okta.com/admin/group/GROUP_ID

    此表达式将检索用户所属的 Okta 用户群组的名称,并将其作为数组返回。

    New attribute statement for groups

    您的 Okta 账户必须启用 SAML_SUPPORT_ARRAY_ATTRIBUTES,因为 Metabase 期望 Okta 将属性作为数组传递。如果您的 Okta 账户较旧,您可能需要联系 Okta 支持以启用 SAML_SUPPORT_ARRAY_ATTRIBUTES

    接下来,您需要告诉 Metabase 如何将 Okta 群组映射到 Metabase 群组。

  3. Metabase SAML 设置
  • 开启 同步群组成员资格
  • 对于您添加到 Okta 用户的每个群组,设置一个新的映射到 Metabase 群组。
  • 群组属性名称 中,输入 MetabaseGroupName(SAML 属性声明的名称)。

    Metabase group mapping

SAML 问题故障排除

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

延伸阅读

阅读其他 Metabase 版本的文档。

© . All rights reserved.