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 绑定与 Redirect 绑定类似,但 POST 绑定使用 POST 请求而不是使用 GET 请求来交换 XML 文档。在交换文档时,POST Binding 使用 JavaScript 将 POST 请求发送到红帽构建的 Keycloak 服务器或应用程序。HTTP 以 HTML 文档响应,其中包含嵌入式 JavaScript 的 HTML 表单。当页面加载时,JavaScript 会自动调用表单。
建议因为两个限制而发布 POST 绑定:
- security wagon-categoriesWith Redirect 绑定,SAML 响应是 URL 的一部分。在日志中捕获响应是不太安全的。
- HTTP 有效负载中的文档 大小 是多于有限 URL 的大量数据范围。
10.2.1.3. ECP
增强的客户端或代理(ECP)是一个 SAML v.2.0 配置集,它允许在 Web 浏览器上下文外交换 SAML 属性。它通常由基于 REST 或 SOAP 的客户端使用。
10.2.2. Red Hat build of Keycloak Server SAML URI Endpoints
红帽构建的 Keycloak 为所有 SAML 请求有一个端点。
http(s)://authserver.host/realms/{realm-name}/protocol/saml
所有绑定都使用此端点。