SAML与Okta

Okta SAML 身份验证仅适用于 Pro企业 计划(无论是自托管还是 Metabase Cloud)。

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

在Metabase中设置SAML

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

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

使用Okta SAML说明中的信息填写在管理员面板 > 身份验证 > SAML中的Metabase 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的新用户配置文件属性,它可以是字符串字符串数组。请参阅创建新用户配置文件属性的说明。新用户配置文件属性
  2. 为Okta中的每个用户,在metabaseGroups属性中填写他们的Metabase组。

    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,设置类型为“基本”,并将值设置为

    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其他版本的文档。

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