Angularjs Spring Security SAML断言到期与应用程序会话到期

Angularjs Spring Security SAML断言到期与应用程序会话到期,angularjs,session,spring-security,saml-2.0,spring-saml,Angularjs,Session,Spring Security,Saml 2.0,Spring Saml,我对SAML断言到期和应用程序会话到期感到困惑 简单地说,当我们在容器中部署应用程序时,就会创建一个会话。此会话到期可以通过web.xml中的以下条目进行控制 <session-config> <session-timeout>60</session-timeout> </session-config> 60 接下来,当我使用带有SAML扩展的Spring安全性时,显然同样的会话概念也适用。(如果有必要,我将在WildFly 8.2中

我对SAML断言到期和应用程序会话到期感到困惑

简单地说,当我们在容器中部署应用程序时,就会创建一个会话。此会话到期可以通过web.xml中的以下条目进行控制

<session-config>
    <session-timeout>60</session-timeout>
</session-config>

60
接下来,当我使用带有SAML扩展的Spring安全性时,显然同样的会话概念也适用。(如果有必要,我将在WildFly 8.2中部署该应用程序)

此外,当应用程序会话过期时,注销行为似乎等同于本地注销概念

到目前为止还不错。现在让我们假设SAML断言在2小时内是有效的,并且用户已经积极地工作了2小时。那么接下来的请求会发生什么呢?它应该重新登录到IDP吗?但是,这不会给用户带来不便吗?如果应用程序在断言过期2小时后重定向到IDP以再次登录,那么AJAX请求应该如何处理


这是关于Spring SAML为经过身份验证的用户发出一个ExpireingUserNameAuthenticationToken的参考。一旦用于验证用户身份的SAML断言在时间之后到达其
会话NONONOR,令牌在其
isAuthenticated()
方法中开始返回false

可以通过覆盖
SAMLAuthenticationProvider
并更改方法
getExpirationDate(credential)
禁用此行为,该方法返回断言过期的时间,如果断言从未过期,则返回时间。然后,应用程序将完全依赖于容器中配置的会话过期

expireingUserNameAuthenticationToken
过期后,Spring Security将当前令牌传递给
AuthenticationManager
(在
下的securityContext.xml中配置)

您可以通过添加您自己的
AuthenticationProvider
来影响接下来发生的事情,该提供者能够处理
expireingUsernameAuthenticationToken
。否则,系统会出现故障,出现
ProviderNotFoundException
或其他类似
BadCredentialsException
身份验证异常(如果您同时使用用户名/密码身份验证)

异常随后由
ExceptionTranslationFilter
处理,它通过调用配置的身份验证
入口点来启动新的身份验证过程,例如
SamlentPoint
,它使用默认IDP启动身份验证或显示IDP选择页面。正如您所说,该过程还将基本上执行本地注销

默认情况下,系统对所有HTTP调用的行为都是相同的-无论是否为AJAX。您可以通过将API和普通URL拆分为单独的
元素来定义不同的行为,并为每个元素使用不同的
入口点
(interface
AuthenticationEntryPoint
)。例如,
http403禁止入口点
可能适合您的AJAX调用