現在、RESTエンタープライズWebアプリケーションのセキュリティをコーディングしています。最終的にカスタムCSRFフィルタが動作したとき、私は何もPOSTできません/ login私はCSRFトークンが必要です(GETは可能ですが)。まず、トークンを初めて取得してログインに行くPOSTフォームに追加するにはどうすればいいですか?Spring SecurityのカスタムCSRFフィルタでmy/loginを無視しない
私はRESTクライアントとしてPostmanを使用しています。トークンを取得できる唯一の方法はまずトークンを取得してPOSTに追加できるようにダミーGETを実行することですこのようにはならない。
私はウェブセキュリティ、csrfに新しく、フロントエンドの開発者でもないので、そこに問題がある可能性があります。
PD:私のセキュリティ:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.addFilterAfter(new CsrfTokenResponseHeaderBindingFilter(), CsrfFilter.class)
.authorizeRequests()
.antMatchers("/login").permitAll().anyRequest().authenticated();
http
.formLogin().loginPage("/login").permitAll().successHandler(authenticationSuccessHandler)
.failureHandler(authenticationFailureHandler)
.and()
.rememberMe().rememberMeParameter("remember-me").tokenValiditySeconds(2000)
.and()
.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint)
.and()
.sessionManagement().maximumSessions(1);
}
はまた、この1を試してみましたが、ダメ:
@Override
public void configure(WebSecurity webSecurity) throws Exception
{
webSecurity
.ignoring().antMatchers("/login").anyRequest();
}
私は、作者へのクレジットをこのカスタムフィルタを使用していないよ:https://github.com/aditzel/spring-security-csrf-filter
PD2:十分に明確でない場合は、最初にダミーを取得せずにPOSTを使用してログインしたいと思います。私はコード問題か概念(セキュリティ関連)問題かどうかは分かりません。
だから、すべての後に、概念の問題でした。もっと2つのこと:それは安全ですか?つまり、GETを受け取るすべてのRESTエンドポイントは、認証されていないGETでもCSRFトークンを取得します(認証されていないcookie、つまり認証されていない請願応答は401エラーではありません)。第二に、フロントエンドのプロダクションリリースでは、リダイレクトやルーティングを行うときに、まずCSRFトークンを取得してログインメニューに残すようにGETする必要があります。または、アプローチが異なる必要がありますか?私はこの2つが解決された後に答えを投票しようとしています –
2つの概念と認証)は関連していますが異なっています。 CSRFは、すべてのコールが同じソースから発信されることを保証するためのものです。つまり、誰もトークンなしでURLをコピーして再利用することはできません。認証は、発信者が –
であることを確認することです。発信者が正しい資格情報を提供していることと、セッションが認証されていることを確認するには、CSRFの後でも認証が必要です。セッションを必要としないRESTエンドポイントにはCSRFは必要ありません。 –