rak*_*pan 5 session spring-security saml-2.0 angularjs spring-saml
我对SAML断言到期与应用程序会话到期感到困惑.
简单来说,当我们在容器中部署应用程序时,会创建一个会话.可以使用web.xml中的以下条目控制此会话到期
<session-config>
<session-timeout>60</session-timeout>
</session-config>
Run Code Online (Sandbox Code Playgroud)
接下来,当我使用SAML扩展的Spring Security时,显然会应用相同的会话概念.(我正在WildFly 8.2中部署应用程序,如果这很重要)
此外,当应用程序会话到期时,注销行为似乎等同于本地注销概念.
到现在为止还挺好.现在让我们说SAML断言好2小时,用户已经积极工作了2个小时.接下来的请求会发生什么?它应该重新登录IDP吗?但是,这对用户来说不方便吗?如果应用程序重定向到IDP以在断言到期2小时后再次登录,那么应如何处理AJAX请求?
这是参考这里的问题
Spring SAML ExpiringUsernameAuthenticationToken为经过身份验证的用户发布.isAuthenticated()一旦用于验证用户的SAML断言达到其sessionNotOnOrAfter时间,令牌就会在其方法中开始返回false .
可以通过覆盖SAMLAuthenticationProvider和更改方法来禁用此行为getExpirationDate(credential),该方法在Assertion到期时返回时间,或者null在它永远不会返回时返回.然后,应用程序将完全依赖于容器中配置的会话到期.
一旦ExpiringUsernameAuthenticationToken到期,Spring Security将把当前令牌传递给AuthenticationManager(在securityContext.xml下配置<security:authentication-manager>).
您可以通过添加自己的AuthenticationProvider能力来影响接下来发生的事情ExpiringUsernameAuthenticationToken.否则系统会失败ProviderNotFoundException或与其他AuthenticationException类似BadCredentialsException(如果您同时使用用户名/密码身份验证).
随后处理异常ExceptionTranslationFilter,通过调用配置的身份验证来启动新的身份验证过程EntryPoint- 例如SAMLEntryPoint,使用默认IDP启动身份验证或显示IDP选择页面.正如您所说,该过程也将基本上执行本地注销.
默认情况下,系统对所有HTTP调用的行为都相同 - 无论是否为AJAX.您可以通过将API和普通URL拆分为单独的<security:http>元素来定义不同的行为,并为每个元素使用不同的EntryPoints(接口AuthenticationEntryPoint).例如,Http403ForbiddenEntryPoint可能适合您的AJAX调用.
| 归档时间: |
|
| 查看次数: |
5550 次 |
| 最近记录: |