加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 应用程序会话到期时Spring Security SAML断言到期

发布时间:2020-12-17 17:44:03 所属栏目:安全 来源:网络整理
导读:我对SAML断言到期与应用程序会话到期感到困惑. 简单来说,当我们在容器中部署应用程序时,会创建一个会话.可以使用web.xml中的以下条目控制此会话到期 session-config session-timeout60/session-timeout/session-config 接下来,当我使用SAML扩展的Spring Secu
我对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调用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读