Spring SAML WSO2刷新断言

Spring SAML WSO2刷新断言,spring,wso2,saml,wso2is,spring-saml,Spring,Wso2,Saml,Wso2is,Spring Saml,我已经用WSO2配置了Spring SAML应用程序。当用户登录时,他检索断言的有效性等于5分钟。但5分钟后,没有发生刷新断言 如何在断言过期后在页面重新加载上启用调用/saml/sso?也许你知道另一个解决办法吗?一些豆子的特性 org.springframework.security.saml.webso.websProfileConsumerImpl中的maxAuthenticationAge不工作 org.springframework.security.saml.webso.webso

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

如何在断言过期后在页面重新加载上启用调用
/saml/sso
?也许你知道另一个解决办法吗?一些豆子的特性

org.springframework.security.saml.webso.websProfileConsumerImpl
中的
maxAuthenticationAge
不工作


org.springframework.security.saml.webso.websoprofileoptions中的
forceAuthN
不起作用。

首先,在断言中,
AuthnStatement
中没有
sessionnotorafter
属性,因此过期时间为
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;
}
受保护日期getExpirationDate(SAMLCredential凭证){
List语句List=credential.getAuthenticationAssertion().GetAuthInstances();
DateTime expiration=null;
for(AuthnStatement语句:语句列表){
DateTime newExpiration=语句。getSessionNotOnOrAfter();
if(newExpiration!=null){
if(expiration==null | | expiration.isAfter(newExpiration)){
到期=新到期;
}
}
}
if(过期==null){
条件=credential.getAuthenticationAssertion().getConditions();
expiration=conditions.getNotOnOrAfter();
}
return expiration!=null?expiration.minutes(1).toDate():null;
}

首先,在断言中,
AuthnStatement
中的
sessionnonorafter
属性不是
。在这种情况下,我从
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;
}
受保护日期getExpirationDate(SAMLCredential凭证){
List语句List=credential.getAuthenticationAssertion().GetAuthInstances();
DateTime expiration=null;
for(AuthnStatement语句:语句列表){
DateTime newExpiration=语句。getSessionNotOnOrAfter();
if(newExpiration!=null){
if(expiration==null | | expiration.isAfter(newExpiration)){
到期=新到期;
}
}
}
if(过期==null){
条件=credential.getAuthenticationAssertion().getConditions();
expiration=conditions.getNotOnOrAfter();
}
return expiration!=null?expiration.minutes(1).toDate():null;
}