我使用Spring SAML实现了SSO,并且一切正常,可以与idp.ssocircle.com进行交互。
现在我正在尝试使用其他身份提供程序。我已经下载了IdP的元数据,并将其链接到我的spring XML配置中。我还将服务提供者的元数据上传到iDP,并将其链接到spring XML配置中。
我被重定向到我的IdP的登录页面,并且可以成功输入我的凭据。但是出现这样的错误“Signature没有验证凭据的密钥”。
还有另一个stackoverflow帖子描述了一个类似的问题,请参阅"HTTP Status 401 - Authentication Failed: Incoming SAML message is invalid" with Salesforce as IdP for implementating SSO
但是我有问题要遵循解决方案,因为我的Fiddler捕获的SAML响应不包含像“X509Certificate”这样的元素。
编辑(!):但我必须说我的身份提供者的元数据包含“ds:keyInfo”中的“ds:X509Certificate”等元素,其中包含一些内容。但是还有另一个空的“ds:keyInfo”-Element,带有一个空的“ds:X509Data”-Element。
身份提供者的配置是否有问题?
有人可以告诉我这里发生了什么吗?
完整的日志文件:https://drive.google.com/file/d/0B3RlRCEjz-cvZGQ5aldzaUc0blE/edit?usp=sharing
提前致谢,
岸堤
答案 0 :(得分:2)
Response
消息似乎使用与IdP元数据中包含的证书不同的证书进行签名。您应该让您的IdP告诉您他们用于签名的证书,并将其添加到他们的元数据文件中。根据您的说法,也可能是元数据文件不完整或已损坏。
另一个选项是将他们提供给您的证书添加到samlKeystore.jks
(并记住别名)。然后在Spring配置中的IdP元数据定义的signingKey
上将别名定义为ExtendedMetadata
。您可以在Spring SAML manual中找到有关使用ExtendedMetadata
的详细信息。
响应消息中未包含密钥的事实没有错,Spring SAML知道元数据和ExtendedMetadata配置中要使用的密钥。