Spring SAML WSO2 刷新断言

Posted

技术标签:

【中文标题】Spring SAML WSO2 刷新断言【英文标题】:Spring SAML WSO2 Refresh Assertion 【发布时间】:2017-07-17 06:19:28 【问题描述】:

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

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

maxAuthenticationAge 中的org.springframework.security.saml.websso.WebSSOProfileConsumerImpl 不起作用。

org.springframework.security.saml.websso.WebSSOProfileOptions 中的forceAuthN 不起作用。

【问题讨论】:

【参考方案1】:

首先,在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;

【讨论】:

以上是关于Spring SAML WSO2 刷新断言的主要内容,如果未能解决你的问题,请参考以下文章

WSO2 IS 5.1.0 SAML 断言中的空 SignatureValue 和 DigestValue

我如何针对来自身份服务器的 SAML 断言授权用户(Wso2is 5.4.0)

在没有浏览器的情况下对WSO2 Identity Server进行身份验证,并获取SAML2断言消息

Spring SAML - 在运行时读取和刷新 IdP 元数据

Spring SAML 与 WSO2 身份服务器集成,无法识别 SAML 消息

WSO2IS + node.js passport-saml 集成错误