【问题标题】:Spring SAML exception with Tomcat/ADFS integrationTomcat/ADFS 集成的 Spring SAML 异常
【发布时间】: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


    【解决方案1】:

    签名验证失败。 签名未针对凭证的密钥进行验证 使用候选验证凭证的签名验证失败 org.opensaml.xml.validation.ValidationException:签名未针对凭证的密钥进行验证

    当您尝试使用不同的 publicKey 验证 saml 响应或断言并使用不同的公钥-私钥对进行签名时,会发生此错误。 先验证saml响应签名x509证书和你的idp公证书不一样。

    【讨论】:

      【解决方案2】:

      以下内容可能对您有所帮助, 请确认您的 idp.xml 与您的 IDP/IDP 领域具有相同的公开。确保 IDP 和 Application 在同一 timeZone/Time。

      【讨论】:

        猜你喜欢
        • 2016-12-02
        • 2014-08-23
        • 1970-01-01
        • 2014-11-25
        • 2016-08-08
        • 2017-06-16
        • 2012-11-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多