angularjs – 应用程序会话到期时Spring Security SAML断言到期
我对SAML断言到期与应用程序会话到期感到困惑.
简单来说,当我们在容器中部署应用程序时,会创建一个会话.可以使用web.xml中的以下条目控制此会话到期 <session-config> <session-timeout>60</session-timeout> </session-config> 接下来,当我使用SAML扩展的Spring Security时,显然会应用相同的会话概念. (我正在WildFly 8.2中部署应用程序,如果这很重要) 此外,当应用程序会话到期时,注销行为似乎等同于本地注销概念. 到现在为止还挺好.现在让我们说SAML断言好2小时,用户已经积极工作了2个小时.接下来的请求会发生什么?它应该重新登录IDP吗?但是,这对用户来说不方便吗?如果应用程序重定向到IDP以在断言到期2小时后再次登录,那么应如何处理AJAX请求? 这是参考the question here 解决方法
Spring SAML为经过身份验证的用户发出ExpiringUsernameAuthenticationToken.一旦用于验证用户的SAML断言到达其sessionNotOnOrAfter时间,令牌就会在其isAuthenticated()方法中开始返回false.
可以通过重写SAMLAuthenticationProvider和更改方法getExpirationDate(credential)来禁用此行为,该方法返回Assertion到期时的时间,如果它从未返回,则返回null.然后,应用程序将完全依赖于容器中配置的会话到期. ExpiringUsernameAuthenticationToken到期后,Spring Security会将当前令牌传递给AuthenticationManager(在< security:authentication-manager>下的securityContext.xml中配置). 您可以通过添加自己的能够处理ExpiringUsernameAuthenticationToken的AuthenticationProvider来影响接下来发生的事情.否则系统会因ProviderNotFoundException或其他一些AuthenticationException(如BadCredentialsException)而失败(如果您同时使用用户名/密码身份验证). 该异常随后由ExceptionTranslationFilter处理,ExceptionTranslationFilter通过调用配置的身份验证EntryPoint来启动新的身份验证过程 – 例如,SAMLEntryPoint,使用默认IDP启动身份验证或显示IDP选择页面.正如您所说,该过程也将基本上执行本地注销. 默认情况下,系统对所有HTTP调用的行为都相同 – 无论是否为AJAX.您可以通过将API和普通网址拆分为单独的< security:http>来定义不同的行为.元素并为每个使用不同的EntryPoints(接口AuthenticationEntryPoint).例如,Http403ForbiddenEntryPoint可能适合您的AJAX调用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |