CAS对接Azure SAML2报Authentication issue instant is too old如何解决
根因说明
你遇到的报错核心是Azure AD返回的SAML响应中AuthnInstant字段(记录用户最近一次在Azure侧完成身份认证的时间),早于CAS侧配置的maximumAuthenticationLifetime允许的时间范围。和SAML断言本身的有效期无关:如果用户在Azure侧保持了长期会话,Azure会复用历史认证时间生成响应,并不会每次调用都生成新的AuthnInstant,所以就算你配置了1天的阈值,只要用户的Azure会话超过1天就会触发报错。
解决方案
方案1:强制Azure返回最新认证时间的令牌
你可以调整CAS的SAML请求参数,要求Azure在会话超期时强制用户重新认证,获取最新的AuthnInstant:
- 每次登录都强制重新认证:添加CAS配置
cas.authn.pac4j.saml[0].force-auth=true,该配置会在SAML认证请求中携带ForceAuthn="true"属性,Azure收到后会跳过现有会话,要求用户重新登录,生成全新的认证时间戳。 - 仅在会话超期时强制重新认证:添加CAS配置
cas.authn.pac4j.saml[0].maximum-authentication-context-age=86400,该配置会在请求中携带最大允许的会话时长阈值,Azure如果发现用户当前会话超过该值,会自动触发重新认证,否则可以复用现有会话,登录体验更好。
方案2:调整CAS侧校验阈值适配Azure会话规则
如果允许用户复用Azure侧的长期会话,可以直接调大CAS侧的校验阈值:
将 cas.authn.pac4j.saml[0].maximumAuthenticationLifetime 参数调整为更大的值,比如设置为2592000(30天),只要在Azure AD默认的会话有效期范围内(默认活跃用户会话有效期为90天),就不会触发时间校验错误。
额外排查项
请确认CAS服务器的NTP时间同步配置正常,CAS服务器和Azure AD的系统时间差如果超过5分钟,也会触发同类时间校验异常。
内容的提问来源于stack exchange,提问作者Otto Sandström
相关产品推荐
相关产品推荐

