2017-02-15 17 views
3

私たちは、Symfony 3 REST API(FosRestBundleを使用)に基づいてAngular 2 Webアプリケーションを構築しています。私たちはステートフルJWTを使用して、バックエンドとフロントエンドの間でユーザーを認証しています。Symfony 3 API RESTとJWTのAngular webappにCSRFトークン保護を使用すると便利ですか?

現在、CSRFについて考えており、JWTに加えてCSRFトークンを使用するのが正しいかどうか疑問に思っています。私たちは、FosRestBundle documentationにすることをお読みください。

HTMLフォーム経由だけでなく、REST APIを介して両方のフォームを処理する単一のアプリケーションを構築する場合、1はCSRFトークンの検証と問題に実行されます。ほとんどの場合、HTMLフォームで使用可能にする必要がありますが、REST APIに使用することは意味がありません。このため、特定の役割を持つユーザーのCSRF検証を無効にするフォーム拡張機能があります。これはもちろん、REST APIユーザーが自分自身を認証し、特別な役割を割り当てられることを要求します。

また、他のいくつかのStackOverflowに関する質問もあります(たとえばherehereを参照)。

私の質問は簡単です:REST APIでCSRFトークンを使用することは推奨されないのはなぜですか? JWTがCSRF攻撃をどのように保護できるかはわかりません。すべての

答えて

2

まず:-)

おかげで、 "ステートフルJWTは" 矛盾した表現です。 the introduction to JWT引用すると:ユーザーが保護されたルートやリソースにアクセスしようとするたびに

を、ユーザエージェントは、ベアラスキーマを使用して一般的にAuthorizationヘッダーで、JWTを送信する必要があります。ヘッダの内容は、次のようになります。ユーザーの状態ががサーバメモリに保存されることはありませんよう

Authorization: Bearer <token>

これはステートレス認証機構です。サーバーの保護されたルートは、Authorizationヘッダー内の有効なJWTをチェックし、存在する場合、ユーザーは保護されたリソースにアクセスできます。

JWTによる認証が正しく行われると、CSRFトークンが廃止されます。これは、CSRF攻撃がクッキーを保存しているブラウザに依存しており、各リクエストとともにサーバーに送信するためです。ただし、POST要求をトリガーする偽造フォームのボタンをクリックすると、この要求にはAuthorizationヘッダーが含まれないため、サーバーによって承認されていないものとして処理されます。

関連する問題