SAML 故障排除
本页面包含使用 SAML 进行 OpenSearch Dashboards 身份验证的故障排除步骤。
目录
检查 sp.entity_id
大多数身份提供商 (IdP) 允许您为不同的应用程序配置多种身份验证方法。例如,在 Okta 中,这些客户端被称为“Applications”。在 Keycloak 中,它们被称为“Clients”。每个都有自己的实体 ID。请确保配置 sp.entity_id
以匹配这些设置
saml:
...
http_authenticator:
type: 'saml'
challenge: true
config:
...
sp:
entity_id: opensearch-dashboards-saml
检查 SAML 断言消费者服务 URL
成功登录后,您的 IdP 使用 HTTP POST 将 SAML 响应发送到 OpenSearch Dashboards 的“断言消费者服务 URL”(ACS)。
OpenSearch Dashboards 安全插件提供的端点是
/_opendistro/_security/saml/acs
请确保您已在 IdP 中正确配置此端点。某些 IdP 还要求您将它们发送请求的所有端点添加到允许列表中。请确保 ACS 端点已列出。
OpenSearch Dashboards 还要求您将此端点添加到允许列表。请确保您在 opensearch_dashboards.yml
中有以下条目
server.xsrf.allowlist: [/_opendistro/_security/saml/acs]
签署所有文档
某些 IdP 默认不签署 SAML 文档。请确保 IdP 签署所有文档。
Keycloak
角色设置
在 SAML 响应中包含用户角色取决于您的 IdP。例如,在 Keycloak 中,此设置位于客户端的 Mappers 部分。在 Okta 中,您必须设置组属性语句。请确保此配置正确,并且 SAML 配置中的 roles_key
与 SAML 响应中的角色名称匹配
saml:
...
http_authenticator:
type: 'saml'
challenge: true
config:
...
roles_key: Role
检查 SAML 响应
如果您不确定 IdP 的 SAML 响应包含什么以及它将用户名和角色放置在哪里,您可以在 log4j2.properties
中启用调试模式
logger.token.name = com.amazon.dlic.auth.http.saml.Token
logger.token.level = debug
此设置会将 SAML 响应打印到 OpenSearch 日志文件,以便您可以检查和调试它。将此日志记录器设置为 debug
会生成大量语句,因此不建议在生产环境中使用。
检查 SAML 响应的另一种方法是在登录 OpenSearch Dashboards 时监控网络流量。IdP 使用 HTTP POST 请求将 Base64 编码的 SAML 响应发送到
/_opendistro/_security/saml/acs
检查此 POST 请求的有效载荷,并使用像 base64decode.org 这样的工具对其进行解码。
检查角色映射
安全插件使用标准角色映射将用户或后端角色映射到一个或多个安全角色。
对于用户名,安全插件默认使用 SAML 响应的 NameID
属性。对于某些 IdP,此属性不包含预期的用户名,而是一些内部用户 ID。检查 SAML 响应的内容以找到您想用作用户名的元素,并通过设置 subject_key
进行配置
saml:
...
http_authenticator:
type: 'saml'
challenge: true
config:
...
subject_key: preferred_username
要检查 SAML 响应中是否包含正确的后端角色,请检查其内容,并设置正确的属性名称
saml:
...
http_authenticator:
type: 'saml'
challenge: true
config:
...
roles_key: Role
检查 JWT 令牌
安全插件将 SAML 响应交换为更轻量级的 JSON Web 令牌。JWT 中的用户名和后端角色最终会映射到安全插件中的角色。如果映射存在问题,您可以使用与 检查 SAML 响应 相同的设置启用令牌调试模式。
此设置会将 JWT 打印到 OpenSearch 日志文件,以便您可以使用 JWT.io 等工具对其进行检查和调试。