Spring SAML WSO2 刷新断言

Spring SAML WSO2 Refresh Assertion

我已经使用 WSO2 配置了 Spring SAML 应用程序。当用户登录时,他检索有效期为 5 分钟的断言。但是 5 分钟过去后,没有刷新断言发生。

如何在断言过期后在页面重新加载时启用调用 /saml/sso?也许您知道另一种解决方案?一些 bean 的属性?

maxAuthenticationAgeorg.springframework.security.saml.websso.WebSSOProfileConsumerImpl 中不工作。

forceAuthNorg.springframework.security.saml.websso.WebSSOProfileOptions 中不工作。

首先,在AuthnStatement中断言不是SessionNotOnOrAfter属性,所以过期时间是null。在这种情况下,我从 NotOnOrAfter 属性 的 Conditions 元素获取到期时间,恕我直言,它与 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;
}