【问题标题】:SAML message intended destination endpoint 'https://serverA/saml/SSO' did not match the recipient endpoint 'https://serverB/saml/SSO'SAML 消息预期目标端点“https://serverA/saml/SSO”与收件人端点“https://serverB/saml/SSO”不匹配
【发布时间】:2021-12-25 09:54:55
【问题描述】:

我的 spring boot 2.5.5 应用程序具有以下结构,其中客户端请求到达服务器 A,然后转发到服务器 B,然后转发到服务器 C。

我已经使用 (spring-security-saml2-core) 实现了 Spring Security 和 AD SAML 身份验证

  1. Nginx (Server A) -> nginx.conf 配置为代理传递到服务器 B
  2. Nginx (Server B) -> nginx.conf 配置为代理传递到服务器 C
  3. Tomcat (Server C) -> 实际部署的 Spring Boot 应用程序

现在在 Azure AD 中,我们创建应用程序并获取实体 ID、元数据 URL 和回复 URL [https://serverA/appName],它们在我的 Spring Boot 应用程序中配置。

完成所有这些配置后,当我们从客户端访问应用程序时,我可以获得 SSO 登录页面,并且可以输入凭据。一旦我尝试登录,就会在服务器 C 日志中列出以下异常

SAML message intended destination endpoint 'https://serverA/appName/saml/SSO' did not match the recipient endpoint 'https://serverB/appName/saml/SSO'

【问题讨论】:

    标签: spring-boot spring-security


    【解决方案1】:

    SAML 非常严格。 当您向 AD 发送 SAML 请求时,您还可以指定要返回的位置。 您还可以在 AD 端配置将响应发送到的位置。 这些必须匹配。如果响应端点不匹配,那么您将收到此错误。 我想您的问题是您的请求来自服务器 A,并且 AD 配置为将其返回到服务器 B。 检查您的元数据返回端点是否与 AZURE 中配置的匹配,您的问题可能就在那里。

    【讨论】:

    • 我也猜到了,但是 AD 中的回复 URL 是 Server A。
    • 没错。该消息说预期的端点是服务器 A。但谁真正得到它以及元数据中配置了什么。检查它们是否都匹配,如果答案应该发送到服务器 B,请将元数据和 AD 配置到服务器 B。