我下载了 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 且 Element 为 [Assertion: null] 的元素
- setElement("ds:变换", "")
- 执行第 (0) 个 .w3.org/2000/09/xmldsig#envelope-signature 转换
- setElement("ds:变换", "")
- 预消化输入:
- http://adfs.mycompany.com/adfs/services/trust robertRYYGWLoginrobertRurn: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”
- 签名方法URI = .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)组织。springframework.security.saml.websso.WebSSOProfileConsumerImpl.verifyAssertion(WebSSOProfileConsumerImpl.java:292) 在 org.springframework.security.saml.websso.WebSSOProfileConsumerImpl.processAuthenticationResponse(WebSSOProfileConsumerImpl.java:214) 在 org.springframework.security.saml.SAMLAuthenticationProvider。在 org.springframework.security.saml.SAMLProcessingFilter.attemptAuthentication(SAMLProcessingFilter.java:84) 的 org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:156) 进行身份验证(SAMLAuthenticationProvider.java:82) .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) at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:166) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy. java:342) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework 的 org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) .security.saml.metadata.MetadataGeneratorFilter.doFilter(MetadataGeneratorFilter.java:87) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.FilterChainProxy.doFilterInternal (FilterChainProxy.java:192) 在 org.springframework.security.web。FilterChainProxy.doFilter(FilterChainProxy.java:160) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) at 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.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:614) 在 org.apache.catalina.org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)。 core.StandardHostValve.invoke(StandardHostValve.java:170) 在 org.apache.catalina.valves.ErrorReportValve。在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在 org.apache.catalina.invoke(AccessLogValve.java:956) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) 调用(ErrorReportValve.java:103) .catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) at 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) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:724)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) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) at 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)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) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) at 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)在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 调用(AccessLogValve.java:956) .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)在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 调用(AccessLogValve.java:956) .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)调用(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) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) at 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)调用(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) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) at 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)进程(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)进程(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)在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:724) 运行(ThreadPoolExecutor.java:615)在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:724) 运行(ThreadPoolExecutor.java:615)
- 尝试使用提供的凭证中的密钥验证签名
- 创建 XMLSignature 对象
- 使用签名算法 URI 验证签名:.w3.org/2000/09/xmldsig#rsa-sha1
- 验证凭证密钥算法“RSA”,密钥实例类“sun.security.rsa.RSAPublicKeyImpl”
- 签名方法URI = .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)