【发布时间】:2016-08-31 13:01:59
【问题描述】:
我下载了 Sprind SAML 示例应用程序,它在我的本地 tomcat 中运行良好(针对 SSOCircle)。然后我添加了一个新的SP指向我们公司的ADFS。我遇到了几个问题并一一解决。现在我能够发送请求并获得有效的 saml 响应和断言令牌。但是我收到以下错误消息:
我确实遵循了一些旧线程(感谢 Vladimír Schäfer)并将公钥导入 samlKeystore.jks,但仍然遇到相同的错误。任何帮助表示赞赏。
错误详情:
- 规范化的 SignedInfo:
- QCZQsG03PFbYdFMyX2UaO2rXSXA=
- 验证 1 个参考文献
- 不要求我遵循嵌套清单
- setElement("ds:Reference", "")
- setElement("ds:Transforms", "")
- 请求 URI .w3.org/2000/09/xmldsig#sha1
- 我被要求创建一个 ResourceResolver 并得到 0
- 通过类 org.apache.xml.security.utils.resolver.ResourceResolver 检查可解决性
- 状态我可以解决参考:“#_28691d8f-b0ab-4c19-ad32-4c60fada6e90”
- 尝试捕获 ID 为 _28691d8f-b0ab-4c19-ad32-4c60fada6e90 且元素为 [Assertion: null] 的元素
- setElement("ds:Transform", "")
- 执行第 (0) 次 .w3.org/2000/09/xmldsig#envelope-signature 转换
- setElement("ds:Transform", "")
- 预消化输入:
- http://adfs.mycompany.com/adfs/services/trustrobertRYYGWLoginrobertRurn:federation:authentication:windows
- URI“#_28691d8f-b0ab-4c19-ad32-4c60fada6e90”验证成功
- 引用具有类型
- 使用提供的凭据中的密钥验证签名
- 使用候选凭据的签名验证成功
- 使用 KeyInfo 派生凭据成功验证签名
- 正在尝试建立对 KeyInfo 派生凭据的信任
- 无法根据受信任的密钥验证不受信任的凭据
- 无法根据受信任的密钥验证不受信任的凭据
- 无法根据受信任的密钥验证不受信任的凭据
- 未能建立对 KeyInfo 派生凭据的信任
- 无法使用任何 KeyInfo 派生凭据验证签名和/或建立信任
- 尝试使用受信任的凭据验证签名
- 尝试使用提供的凭据中的密钥验证签名
- 创建 XMLSignature 对象
- 使用签名算法 URI 验证签名:.w3.org/2000/09/xmldsig#rsa-sha1
- 验证凭证密钥算法“RSA”,密钥实例类“sun.security.rsa.RSAPublicKeyImpl”
- signatureMethodURI = .w3.org/2000/09/xmldsig#rsa-sha1
- jceSigAlgorithm = SHA1withRSA
- jceSigProvider = SunRsaSign
- PublicKey = Sun RSA 公钥,2048 位 模数:23431177975394 公共指数:65537
- 规范化的 SignedInfo:
- QCZQsG03PFbYdFMyX2UaO2rXSXA=
- 签名验证失败。
- 签名未针对凭据的密钥进行验证
- 使用候选验证凭证的签名验证失败 org.opensaml.xml.validation.ValidationException:签名未针对凭证的密钥进行验证 在 org.opensaml.xml.signature.SignatureValidator.validate(SignatureValidator.java:79) 在 org.opensaml.xml.signature.impl.BaseSignatureTrustEngine.verifySignature(BaseSignatureTrustEngine.java:142) 在 org.opensaml.xml.signature.impl.ExplicitKeySignatureTrustEngine.validate(ExplicitKeySignatureTrustEngine.java:110) 在 org.opensaml.xml.signature.impl.ExplicitKeySignatureTrustEngine.validate(ExplicitKeySignatureTrustEngine.java:49) 在 org.springframework.security.saml.websso.AbstractProfileBase.verifySignature(AbstractProfileBase.java:267) 在 org.springframework.security.saml.websso.WebSSOProfileConsumerImpl.verifyAssertionSignature(WebSSOProfileConsumerImpl.java:419) 在 org.springframework.security.saml.websso.WebSSOProfileConsumerImpl.verifyAssertion(WebSSOProfileConsumerImpl.java:292) 在 org.springframework.security.saml.websso.WebSSOProfileConsumerImpl.processAuthenticationResponse(WebSSOProfileConsumerImpl.java:214) 在 org.springframework.security.saml.SAMLAuthenticationProvider.authenticate(SAMLAuthenticationProvider.java:82) 在 org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:156) 在 org.springframework.security.saml.SAMLProcessingFilter.attemptAuthentication(SAMLProcessingFilter.java:84) 在 org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:195) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 在 org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:166) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.saml.metadata.MetadataGeneratorFilter.doFilter(MetadataGeneratorFilter.java:87) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 在 org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 在 org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 在 org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:614) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:724)
- 尝试使用提供的凭据中的密钥验证签名
- 创建 XMLSignature 对象
- 使用签名算法 URI 验证签名:.w3.org/2000/09/xmldsig#rsa-sha1
- 验证凭证密钥算法“RSA”,密钥实例类“sun.security.rsa.RSAPublicKeyImpl”
- signatureMethodURI = .w3.org/2000/09/xmldsig#rsa-sha1
- jceSigAlgorithm = SHA1withRSA
- jceSigProvider = SunRsaSign
- PublicKey = Sun RSA 公钥,2048 位 模数:2179836566179054962 公共指数:65537
- 规范化的 SignedInfo:
- QCZQsG03PFbYdFMyX2UaO2rXSXA=
- 签名验证失败。
- 签名未针对凭据的密钥进行验证
- 使用候选验证凭证的签名验证失败 org.opensaml.xml.validation.ValidationException:签名未针对凭证的密钥进行验证 在 org.opensaml.xml.signature.SignatureValidator.validate(SignatureValidator.java:79) 在 org.opensaml.xml.signature.impl.BaseSignatureTrustEngine.verifySignature(BaseSignatureTrustEngine.java:142) 在 org.opensaml.xml.signature.impl.ExplicitKeySignatureTrustEngine.validate(ExplicitKeySignatureTrustEngine.java:110) 在 org.opensaml.xml.signature.impl.ExplicitKeySignatureTrustEngine.validate(ExplicitKeySignatureTrustEngine.java:49)
【问题讨论】:
标签: spring security spring-saml adfs3.0