如何使用 SAML ECP 配置文件配置 Keycloak

Mak*_*poc 5 saml single-sign-on saml-2.0 keycloak

我正在使用 SAML 为运行 tomcat 的 Web 服务器实现 SSO 身份验证流程。使用 POST 或重定向绑定时一切正常,但根据我所读到的内容,为了支持 REST API 前面的 SAML 身份验证,我还需要配置和使用 ECP 配置文件。

如果我错了,请先纠正我,但 ECP 流程应该是这样的:

  1. 客户端访问 SP REST API
    • 客户端知道他需要进行身份验证,因此他设置了所需的 ECP 标头 (Accept: application/vnd.paos+xmlPAOS: urn:liberty:paos:2003-08;urn:oasis:names:tc:SAML:2.0:profiles:SSO:ecp)
  2. SP 发现客户端未经过身份验证并返回包含 PAOS 请求的 SOAP 信封。
  3. 客户端负责将其发送到其 ECP 消费者服务上的适当 IdP。
  4. IdP 向客户端发起身份验证质询
  5. IdP 以另一个 SOAP 信封的形式返回响应,其主体中包含 saml 响应
  6. 客户端必须将此响应发送到 SP 的ECP/SOAP 断言消费者服务

问题是所有这些都在步骤 6 之前有效。在这一步中,我遇到了问题,响应信封的主体包含一个 Destination 属性,该属性指向SP 的POST 断言消费者服务。此目标属性由 keycloak 设置,与我想要将响应发送到的实际 ECP 服务不匹配。我们使用的 SAML 库是 opensaml,它根据此 Destination 属性检查请求 URI,如果不匹配,则会引发异常org.opensaml.xml.security.SecurityException: SAML message intended destination endpoint did not match recipient endpoint

我明白为什么抛出这个异常,但不明白如何使用 SP 的 ECP/SOAP 服务配置 Keycloak。在Keycloak的管理控制台中,我只能配置SSO POST/Redirect和SLO POST/Redirect的URL,但无法配置ECP。

我目前正在配置另一个 IdP,但我真的很想确保 Keycloak 也可以成为我们解决方案支持的服务器。

小智 1

您不能只读取 paos:Request responseConsumerURL 并将 idp 响应发布到该 url 吗?

至少,我就是这么做的。