使用CAS的Spring Security会跳过会话固定保护

时间:2013-01-25 16:47:23

标签: java spring-security cas

我有一个使用spring security和CAS(spring 3.0.5,cas 3.4.5)的应用程序,但是当我登录会话时,id不会改变。

当我登录CasAuthenticationFilter执行身份验证并且身份验证成功时,它不会继续过滤器链,而是在SecurityContextHolder上设置身份验证并调用successHandler。这会重定向到我请求的原始URL,该URL需要进行身份验证。 SessionManagementFilter永远不会破解调用会话策略来创建新会话。

AbstractAuthenticationFilter扩展的CasAuthenticationFilter似乎有自己的会话策略,但默认为NullAuthenticatedSessionStrategy,容易受到会话固定的影响。问题是为什么当弹簧claims to prevent session fixation by default

时,默认策略容易受到攻击

解决此问题的最佳解决方案是什么?

2 个答案:

答案 0 :(得分:5)

只有在使用命名空间时才会自动设置会话固定策略。如果您使用的是显式过滤器,那么您可以自己将SessionFixationProtectionStrategy注入过滤器。或者,如果您的应用程序中存在明显的验证后起始点,则可以在那里重新创建会话。

由于过滤器优先于会话身份验证策略的引入,并且通常以保守的方式引入更改,因此默认情况下可能不会出于历史原因设置会话固定版本。您可以打开一个更改请求,建议默认情况下它可能更好。

答案 1 :(得分:3)

我遇到了同样的问题。我通过显式注入SessionFixationProtectionStrategy来解决它(基于命名空间的配置似乎不适用于我的CAS自定义过滤器)。这是我目前的配置:

<bean id="sessionRegistry" class="org.springframework.security.core.session.SessionRegistryImpl"/>

<bean id="sessionControlStrategy" class="org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy">
    <constructor-arg ref="sessionRegistry"/>
    <property name="maximumSessions" value="2"/>
</bean>

<bean id="casFilter" class="org.springframework.security.cas.web.CasAuthenticationFilter">
    <property name="authenticationManager" ref="authenticationManager" />
    <property name="sessionAuthenticationStrategy" ref="sessionControlStrategy"/>
</bean>