SAML with Okta
Okta SAML 身份验证仅适用于 Pro 和 Enterprise 计划(包括自托管和 Metabase 云)。
您还可以选择 配置组映射,以自动将 Okta 用户分配到 Metabase 组。
有关 SAML 的一般信息,请参阅 使用 SAML 进行身份验证。
在 Metabase 中开启基于 SAML 的 SSO
在管理区域的“管理”>“设置”部分,转到“身份验证”选项卡,然后点击“SAML”下的“设置”。
您会看到一个类似这样的 SAML 配置表单
您需要使用此表单中的信息在 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 提供一些信息
- 在 Okta 中,转到您的 Metabase 应用程序集成页面。
- 转到“登录”选项卡。
- 点击“查看 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 组。
- Okta 用户组.
使用用户配置文件属性分配组
您可以创建一个自定义用户配置文件属性,并用每个用户的 Metabase 组填充它。
- 在 Okta 的配置文件编辑器中,创建新的用户配置文件属性,名为
metabaseGroups
,可以是string
或string array
。 -
对于 Okta 中的每个用户,使用他们的 Metabase 组填充
metabaseGroups
属性。我们建议您在 Okta 中使用与 Metabase 中相同的组名称。
Metabase 组不必与 Okta 用户组对应。如果您想使用 Okta 用户组设置 Metabase 组,请参阅将 Okta 用户组映射到 Metabase 组。
您的 Okta 账户必须启用
SAML_SUPPORT_ARRAY_ATTRIBUTES
,因为 Metabase 期望 Okta 将属性作为数组传递。如果您的 Okta 账户较旧,您可能需要联系 Okta 支持以启用SAML_SUPPORT_ARRAY_ATTRIBUTES
。 -
在 Metabase 应用程序集成的 Okta SAML 设置中,添加一个新的属性声明
MetabaseGroupName
,其值为user.metabaseGroups
(您刚刚创建的配置文件属性) - 在 Metabase SAML 设置中
- 开启同步组成员资格。
- 对于您添加到 Okta 用户的每个组,设置一个新的映射到 Metabase 组。
-
在组属性名称中,输入
MetabaseGroupName
(SAML 属性声明的名称)。
将 Okta 用户组映射到 Metabase 组
- 创建与 Metabase 组对应的 Okta 用户组,并将其分配给 Okta 用户。
-
在 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 用户组的名称,并将其作为数组返回。
您的 Okta 账户必须启用
SAML_SUPPORT_ARRAY_ATTRIBUTES
,因为 Metabase 期望 Okta 将属性作为数组传递。如果您的 Okta 账户较旧,您可能需要联系 Okta 支持以启用SAML_SUPPORT_ARRAY_ATTRIBUTES
。接下来,您需要告诉 Metabase 如何将 Okta 组映射到 Metabase 组。
- 在 Metabase SAML 设置中
- 开启同步组成员资格。
- 对于您添加到 Okta 用户的每个组,设置一个新的映射到 Metabase 组。
-
在组属性名称中,输入
MetabaseGroupName
(SAML 属性声明的名称)。
SAML 问题排查
有关常见问题,请参阅SAML 故障排除。
延伸阅读
阅读其他版本的 Metabase 的文档。