使用 Okta 的 SAML
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 版本的文档。