Angularjs Spring Security SAML断言到期与应用程序会话到期
我对SAML断言到期和应用程序会话到期感到困惑 简单地说,当我们在容器中部署应用程序时,就会创建一个会话。此会话到期可以通过web.xml中的以下条目进行控制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中
<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拆分为单独的
元素来定义不同的行为,并为每个元素使用不同的入口点
(interfaceAuthenticationEntryPoint
)。例如,http403禁止入口点
可能适合您的AJAX调用