10.2. SAML
SAML 2.0 是与 OIDC 类似的规格,但更成熟。它来自 SOAP 和 Web 服务消息传递规格,因此通常比 OIDC 更详细。SAML 2.0 是一个身份验证协议,用于在身份验证服务器和应用程序之间交换 XML 文档。XML 签名和加密用于验证请求和响应。
通常,SAML 实施两个用例。
第一个用例是请求红帽构建的 Keycloak 服务器验证用户的应用程序。成功登录后,应用程序会收到 XML 文档。本文档包含一个 SAML 断言,用于指定用户属性。域数字签名了包含应用程序用来决定用户可在应用程序中访问的资源的访问信息(如用户角色映射)的文档。
第二个用例是访问远程服务的客户端。客户端从红帽构建的 Keycloak 请求 SAML 断言,代表用户调用远程服务。
10.2.1. SAML 绑定 复制链接链接已复制到粘贴板!
红帽构建的 Keycloak 支持三种绑定类型。
10.2.1.1. 重定向绑定 复制链接链接已复制到粘贴板!
重定向 绑定使用一系列浏览器重定向 URI 来交换信息。
- 用户使用浏览器连接至应用程序。应用检测到用户没有经过身份验证。
- 应用程序生成 XML 身份验证请求文档,并将其编码为 URI 中的查询参数。URI 用于重定向到红帽构建的 Keycloak 服务器。根据您的设置,应用程序也可以数字签名 XML 文档,并将签名作为查询参数包含在将 URI 重定向到红帽 Keycloak。此签名用于验证发送请求的客户端。
- 浏览器会重定向到红帽 Keycloak 的构建。
- 服务器提取 XML 身份验证请求文档,并根据需要验证数字签名。
- 用户输入其身份验证凭据。
- 身份验证后,服务器会生成 XML 身份验证响应文档。文档包含一个 SAML 断言,其中包含有关用户的元数据,包括名称、地址、电子邮件和用户具有的任何角色映射。通常,文档使用 XML 签名进行数字签名,也可能加密。
- XML 身份验证响应文档作为重定向 URI 中的查询参数进行编码。URI 将浏览器返回到应用。数字签名也作为查询参数包含。
- 应用接收重定向 URI 并提取 XML 文档。
- 应用验证域的签名,以确保它收到有效的身份验证响应。SAML 断言中的信息用于做出访问决策或显示用户数据。
10.2.1.2. POST 绑定 复制链接链接已复制到粘贴板!
POST 绑定与 重定向 绑定类似,但 POST 绑定使用 POST 请求而不是使用 GET 请求来交换 XML 文档。在交换文档时,POST Binding 使用 JavaScript 将 POST 请求发送到红帽构建的 Keycloak 服务器或应用程序。使用 HTML 文档的 HTTP 响应,其中包含包含嵌入式 JavaScript 的 HTML 表单。当页面加载时,JavaScript 会自动调用表单。
建议因为两个限制而使用 POST 绑定:
- 安全 IANA-osgiWith 重定向 绑定,SAML 响应是 URL 的一部分。不太安全,因为可以在日志中捕获响应。
- HTTP 有效负载中的文档大小调整了文档,比有限的 URL 更多的数据范围。
10.2.1.3. ECP 复制链接链接已复制到粘贴板!
增强的客户端或代理(ECP)是一个 SAML v.2.0 配置文件,它允许在 Web 浏览器上下文之外交换 SAML 属性。它通常由 REST 或基于 SOAP 的客户端使用。
红帽构建的 Keycloak 为所有 SAML 请求有一个端点。
http(s)://authserver.host/realms/{realm-name}/protocol/saml
所有绑定都会使用此端点。