プレゼンテーション層にWicketAuthProjectでWicketを使用しているため、SpringSecurityと統合しました。これは、Wicketが認証のために呼び出すメソッドです。
@Override
public boolean authenticate(String username, String password) {
try {
Authentication request = new UsernamePasswordAuthenticationToken(
username, password);
Authentication result = authenticationManager.authenticate(request);
SecurityContextHolder.getContext().setAuthentication(result);
} catch (AuthenticationException e) {
return false;
}
return true;
}
Spring Security XML構成の内容(内部)は次のとおりです。
<http path-type="regex">
<form-login login-page="/signin"/>
<logout logout-url="/logout" />
</http>
<global-method-security secured-annotations="enabled" />
<authentication-manager alias="authenticationManager"/>
<authentication-provider user-service-ref="userService">
<password-encoder ref="bcryptpasswordencoder" />
</authentication-provider>
セクション2.3.6。リファレンスドキュメントのセッション固定攻撃保護は次のように述べています。
セッション固定攻撃は、悪意のある攻撃者がサイトにアクセスしてセッションを作成し、別のユーザーに同じセッションでログインするように誘導する可能性がある潜在的なリスクです(セッション識別子をパラメーターとして含むリンクを送信することにより、例)。Spring Securityは、ユーザーがログインしたときに新しいセッションを作成することで、これを自動的に保護します。この保護が不要な場合、または他の要件と競合する場合は、のsession-fixation-protection属性を使用して動作を制御できます。 3つのオプションがあります:
- mergeSession-新しいセッションを作成し、既存のセッション属性を新しいセッションにコピーします。これがデフォルトです。
- none-何もしないでください。元のセッションは保持されます。
- newSession-既存のセッションデータをコピーせずに、新しい「クリーンな」セッションを作成します。
認証は機能しますが、Spring Securityにかなり慣れていないので、いくつか質問があり、答えが必要です。
- 通常、ログインの場合、認証情報をPOSTして、SpringSecurity
j_spring_security_check
に実際の認証コードを実行させます。セッション固定攻撃から保護したいのですが、プログラムログインを実行したときに取得できますか?そうでない場合、それを取得するために私は何をしなければなりませんか? - プログラムによるログアウトを実行するにはどうすればよいですか?
- プログラムによるログインとログアウトを使用するので、SpringがこれらのURLをインターセプトしないようにするにはどうすればよいですか?
更新:
セッション固定攻撃からの保護のために、SessionUtilsクラスのメソッドを署名を使用して呼び出す必要があるようですstartNewSessionIfRequired(HttpServletRequest request, boolean migrateAttributes, SessionRegistry sessionRegistry)
。
渡す必要のあるSessionRegistryインスタンスを取得するにはどうすればよいですか?そのエイリアスIDを作成する方法、またはそのIDまたは名前を取得する方法が見つかりません。