4

spring security と CAS (spring 3.0.5、cas 3.4.5) を使用するアプリケーションがありますが、ログインしてもセッション ID が変化しません。

ログインするCasAuthenticationFilterと、認証が実行され、認証が成功した場合、フィルターチェーンは続行されず、代わりに認証が設定されSecurityContextHolder、successHandler が呼び出されます。これにより、認証が必要な元の URL にリダイレクトされます。セッション戦略を呼び出して新しいセッションを作成することはSessionManagementFilter決してありません。

拡張するAbstractAuthenticationFilterCasAuthenticationFilterは独自のセッション戦略があるようですが、デフォルトはNullAuthenticatedSessionStrategyセッション固定に対して脆弱です。質問は、春がデフォルトでセッションの固定を防ぐと主張しているのに、なぜデフォルトの戦略が脆弱なのですか?

これを修正するための最良の解決策は何ですか?

4

2 に答える 2

5

セッション固定戦略は、名前空間を使用している場合にのみ自動的に設定されます。明示的なフィルターを使用している場合は、SessionFixationProtectionStrategy自分でフィルターに a を挿入できます。または、アプリケーションに明らかな認証後の開始点がある場合は、そこでセッションを再作成するだけです。

セッション固定バージョンは、おそらく歴史的な理由からデフォルトでは設定されていません。これは、フィルターがセッション認証戦略の導入よりも前のものであり、変更が通常保守的な方法で導入されるためです。変更リクエストを開いて、デフォルトでより良いものになる可能性があることを提案できます。

于 2013-01-31T12:49:50.833 に答える
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>
于 2013-12-12T12:24:10.253 に答える