SAML 与 Okta

Okta SAML 身份验证仅在 专业版企业版 计划(自托管和 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 设置的属性语句(可选)部分中,创建以下属性语句

  • 电子邮件地址
  • 名字(given name)
  • 姓氏(surname)

即使 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">
              [email protected]
            </saml2:AttributeValue>
        </saml2:Attribute>
    </saml2:AttributeStatement>
</saml2:Assertion>

在 Metabase 中设置 SAML

在 Okta 中设置 SAML 应用程序后,您需要在 Metabase 中配置 SAML。您需要从 Okta 获取一些信息

  1. 在 Okta 中,转到您的 Metabase 应用程序集成的页面。
  2. 转到 Sign On 选项卡。
  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 Profile Editor 中,创建一个新的用户配置文件属性,名为 metabaseGroups,它可以是 stringstring arrayNew User Profile attribute
  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. 在 Metabase 应用程序集成的 Okta 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 版本的文档。