我在使用我们的平台与客户设置 SAML 集成方面花费了相当长的时间。我们使用 OneLogin 的 php sdk 作为服务提供商。不确定他们使用什么作为身份提供商,或者它是否是自定义的。
似乎无论我们做什么,我们从他们那里收到的 AuthN 响应的状态都是:
urn:oasis:names:tc:SAML:2.0:status:Responder
当我在here读到它时,这意味着他们这边存在问题(我们不知道是什么)。相当于 php 中的 500 状态。
与我一起工作的人确信这是配置不匹配的问题。要么他们没有提供正确的声明,要么没有签署我们要求他们签署的部分,等等。
但是如果是这样的话...他们不会仍然向我们发送成功状态的响应吗?如果他们没有正确签名,我们的我们的方面可能会收到错误。但我没想到会收到他们的“响应者”状态。
任何人都可以确认我做出了正确的假设或纠正我的错误吗?
是的,你是对的。在消息到达您这边之前,这两个错误不会被注意到。这是别的东西,通过查看他们身边的日志应该不是不可能找到的。
一般情况下,大多数情况是由于签名算法不匹配造成的。在我们的示例中,我们使用 Spring SAML,并且 Spring SAML 默认使用 SHA-1,而 IDP 使用不同的签名算法 (SHA-256)。因此,由于算法不匹配,我们也收到了相同的响应
urn:oasis:names:tc:SAML:2.0:status:Responder, status message is null
,并且您用于与 IDP 集成的其他库也可能会发生同样的情况。
以下是 Spring SAML 安全性的异常跟踪。
Caused by: org.opensaml.common.SAMLException: Response has invalid status code urn:oasis:names:tc:SAML:2.0:status:Responder, status message is null
org.springframework.security.saml.websso.WebSSOProfileConsumerImpl.processAuthenticationResponse(WebSSOProfileConsumerImpl.java:113)
at org.springframework.security.saml.SAMLAuthenticationProvider.authenticate(SAMLAuthenticationProvider.java:82)