我已经使用WSO2配置了Spring SAML应用程序。当用户登录时,他检索有效等于5分钟的断言。但是5分钟过后,没有发生刷新断言。
断言过期后,如何在页面重新加载时调用/saml/sso
?也许您知道另一种解决方案吗?一些豆子的特性?
maxAuthenticationAge
无效。
<{1}}中的{p> org.springframework.security.saml.websso.WebSSOProfileConsumerImpl
无效。
答案 0 :(得分:1)
首先,断言不是SessionNotOnOrAfter
中的AuthnStatement
属性,因此到期时间为null
。在这种情况下,我从Conditions
属性的NotOnOrAfter
元素获得到期时间,恕我直言,它与SessionNotOnOrAfter
具有相同的值。
其次,为安全起见,我要确保从到期时间减去1分钟,该断言将永远存在。
解决方法是覆盖自定义SAMLAuthenticationProvider
getExpirationDate
方法:
protected Date getExpirationDate(SAMLCredential credential) {
List<AuthnStatement> statementList = credential.getAuthenticationAssertion().getAuthnStatements();
DateTime expiration = null;
for (AuthnStatement statement : statementList) {
DateTime newExpiration = statement.getSessionNotOnOrAfter();
if (newExpiration != null) {
if (expiration == null || expiration.isAfter(newExpiration)) {
expiration = newExpiration;
}
}
}
if (expiration == null) {
Conditions conditions = credential.getAuthenticationAssertion().getConditions();
expiration = conditions.getNotOnOrAfter();
}
return expiration != null ? expiration.minusMinutes(1).toDate() : null;
}