Spring SAML WSO2刷新断言
我已经用WSO2配置了Spring SAML应用程序。当用户登录时,他检索断言的有效性等于5分钟。但5分钟后,没有发生刷新断言 如何在断言过期后在页面重新加载上启用调用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
/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;
}