2017-01-24 1 views
1

を働いていません。私はアクセストークン(JWT実装)をhttpOnly Cookieに保存しています。投稿リクエストに対するXSRF攻撃から身を守るために、ログインページを除くすべてのページでXSRF保護を有効にする必要があります。春のセキュリティガイドhereで、CookieCsrfTokenRepositoryを有効にしました。私は、パブリックAPI(GET)を打ったとき春のセキュリティCookieBasedCSrf私はAngular2フロントエンドとRESTfulな春のバックエンドを開発しています

しかし、XSRF-TOKENが設定されていません。また、Angular2からのログインフォームデータを送信すると、システムは「無効なcsrfトークン」エラーを表示します。

http 
     .csrf() 
      .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) 
      .and() 
     .exceptionHandling() 
      .authenticationEntryPoint(this.authenticationEntryPoint) 
      .and() 
     .sessionManagement() 
      .sessionCreationPolicy(SessionCreationPolicy.STATELESS) 
      .and() 
     .authorizeRequests() 
      .antMatchers(TOKEN_REFRESH_ENTRY_POINT).permitAll() // Token refresh end-point 
      .antMatchers(TOKEN_CSRF_ENTRY).permitAll() 
      .and() 
     .authorizeRequests() 
      .antMatchers(TOKEN_BASED_AUTH_ENTRY_POINT).authenticated() // Protected API End-points 
      .and() 
     .cors() 
      .and() 
     .addFilterBefore(buildAjaxLoginProcessingFilter(), UsernamePasswordAuthenticationFilter.class) 
     .addFilterBefore(buildJwtTokenAuthenticationProcessingFilter(), UsernamePasswordAuthenticationFilter.class); 

答えて

0

あなたはHTTP GETによってCSRFトークンを取得してはならない、Spring Security Referenceを参照してください:

ために適切HTTP動詞

CSRF攻撃から保護するための最初のステップ以下は、私のWebSecurityConfigですあなたのウェブサイトが適切なHTTP動詞を使用するようにすることです。具体的には、Spring SecurityのCSRFサポートを使用する前に、アプリケーションが状態を変更するものに対してPATCH、POST、PUT、および/またはDELETEを使用していることを確認する必要があります。

これは春のセキュリティのサポートの制限はなく、代わりに適切なCSRF防止のための一般的な要件ではありません。その理由は、HTTP GETに個人情報を含めると情報が漏洩する可能性があるからです。機密情報としてGETの代わりにPOSTを使用する際の一般的なガイダンスについては、RFC 2616 Section 15.1.3 Encoding Sensitive Information in URI’sを参照してください。

あなたはCSRF保護からのログインを除外してはならない、Spring Security Reference参照:

ログ要求に形式でログをログを鍛造から保護するために

でCSRFから保護されなければなりません攻撃も。

しかし、あなたは、一部のURLを除外し、CSRF保護するために、いくつかのHTTP動詞が含まれ、Spring Security Referenceを見ることができます:

また、あなたはおそらく、すなわち(要求はCSRFにより保護されているかを決定するために、カスタムRequestMatcherを指定することができますログアウトが悪用されても気にしないでください)。要するに、Spring SecurityのCSRF保護があなたの望むように正確に動作しない場合、その動作をカスタマイズすることができます。 XMLとJavaの設定を使用するときにこれらのカスタマイズを行う方法の詳細についてはCsrfConfigurerのjavadocでこれらのカスタマイズを作成する方法の詳細についてはSection 41.1.18, “<csrf>”マニュアルを参照してください。

0

withCredentials: trueを有効にしましたか? これは私の投稿サーバをAngular2で書く方法です。

this.http.request(
    path, 
    { 
    method: RequestMethod.Post, 
    body: body, 
    headers: customHeaders, 
    withCredentials: true 
    } 
) 
.map... 
.catch... 

私はWebSecurityConfigに同じ設定をしています。 私は、Angular 2とSpring Bootを使用して、CookieCsrfTokenRepositoryを使用する実例を持っています。

My Angular 2 API service

My WebSecurityConfig

のGithubレポ:angular-spring-starter

関連する問題