2016-06-24 14 views
0

現在、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を使用してログインしたいと思います。私はコード問題か概念(セキュリティ関連)問題かどうかは分かりません。

答えて

0

認証とCSRFの設定は、ブラウザベースのWebアプリケーションに適しています。ここでは、GETリクエストで「ログイン」ページを読み込んで資格情報を送信します。このため、GET要求を呼び出した後にトークンを確認することができます。

セッションベースのCSRF保護を維持する場合は、最初のGET要求を含むCSRFトークンを取得し、後続の要求とと​​もに使用する必要があります。ここで

は、多少の関連スレッドである - How to prevent CSRF in a RESTful application?

+0

だから、すべての後に、概念の問題でした。もっと2つのこと:それは安全ですか?つまり、GETを受け取るすべてのRESTエンドポイントは、認証されていないGETでもCSRFトークンを取得します(認証されていないcookie、つまり認証されていない請願応答は401エラーではありません)。第二に、フロントエンドのプロダクションリリースでは、リダイレクトやルーティングを行うときに、まずCSRFトークンを取得してログインメニューに残すようにGETする必要があります。または、アプローチが異なる必要がありますか?私はこの2つが解決された後に答えを投票しようとしています –

+0

2つの概念と認証)は関連していますが異なっています。 CSRFは、すべてのコールが同じソースから発信されることを保証するためのものです。つまり、誰もトークンなしでURLをコピーして再利用することはできません。認証は、発信者が –

+0

であることを確認することです。発信者が正しい資格情報を提供していることと、セッションが認証されていることを確認するには、CSRFの後でも認証が必要です。セッションを必要としないRESTエンドポイントにはCSRFは必要ありません。 –

関連する問題