由于 IP 和 SP 之间的时区差异导致的 Spring Saml 安全身份验证问题

Posted

技术标签:

【中文标题】由于 IP 和 SP 之间的时区差异导致的 Spring Saml 安全身份验证问题【英文标题】:Spring Saml Security authentication issue due to time zone difference between the IP and SP 【发布时间】:2015-08-26 22:18:31 【问题描述】:

下面打印的是由于 IP 和 SP 之间的时区差异导致的身份验证失败问题的堆栈跟踪。有没有办法在 Spring Security 中进行配置?

org.opensaml.common.SAMLException:响应发布时间太旧或日期在未来,偏差 60,时间 2015-06-11T09:27:49.000Z 在 org.springframework.security.saml.websso.WebSSOProfileConsumerImpl.processAuthenticationResponse(WebSSOProfileConsumerImpl.java:126) 在 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)

【问题讨论】:

我遇到了同样的问题 - 我的位置与 UTC 的时间距离偏斜已消失。不过,我宁愿不要将偏斜打开到一个很大的数字…… 【参考方案1】:

您可以从 spring-saml 文档中获取帮助来配置 WebSSOProfileConsumerImpl bean 来配置时间。

您可以尝试更新 refreshToken 元数据的时间

<bean class="org.opensaml.saml2.metadata.provider.ResourceBackedMetadataProvider">
    <constructor-arg>
      <bean class="java.util.Timer"/>
    </constructor-arg>
    <constructor-arg>
        <bean class="org.opensaml.util.resource.ClasspathResource">
         <constructor-arg value="/metadata/idp.xml"/>
        </bean>
    </constructor-arg>
 <property name="parserPool" ref="parserPool"/>
 <property name="minRefreshDelay" value="120000"/>
 <property name="maxRefreshDelay" value="300000"/>
</bean>

并尝试更新 maxAuthenticationAge 时间。

<bean id="webSSOprofileConsumer" class="org.springframework.security.saml.websso.WebSSOProfileConsumerImpl">
        <property name="maxAuthenticationAge" value="28800"/>
    </bean>

【讨论】:

以上是关于由于 IP 和 SP 之间的时区差异导致的 Spring Saml 安全身份验证问题的主要内容,如果未能解决你的问题,请参考以下文章

环境之间的时区差异

由于 .net-core 中的 linq-statement 导致 IEnumerable 和 List 之间出现意外差异? [复制]

如何计算不同时区的两个 NSDate 对象之间的天数差异?

获取客户端和服务器之间的时区差异

EST 和 America/New_York 时区之间的差异

如何处理服务器和本机android应用程序之间的时区差异?