REST APIはユーザー名とパスワードを受け入れ、 認証を行うために開発されます。使用するHTTPメソッドはPOSTなので、 にはキャッシングがありません。また、 通過時のセキュリティのためのSSLがあります
これはほとんどの方法であり、ここではうまくいきます。
認証時に、アクセストークン とリフレッシュトークンが2つ作成されます。リフレッシュ・トークンの有効性はより長くなります。彼らは自己それで私は危険ではないクッキーのトークンを格納するすべての 後続の要求
に送信されるように トークンは、クッキーに書き込まれますが、何らかの形でのサーバー上のあなたJWTモジュールを取得する場合、両方のそこからCSRF攻撃の脆弱性を読み取ってください。CSRFトークンを使用しない限り、どのWebページでもユーザーのブラウザがフォーム+あなたのサイトのCookieをサーバーに送信することができます。だから一般的には、それらはlocalStorageに格納され、毎回リクエストヘッダに "手動で"追加されます。
すべてのREST API呼び出しで、トークンはHTTP ヘッダーから取得されます。アクセストークンが期限切れでない場合は、ユーザの の特権をチェックし、それに応じてアクセスを許可します。アクセストークンが 有効期限が切れているが、リフレッシュトークンが有効であれば、トークンの新しいアクセスを再作成し、新しい有効期限付き トークン(取り消されていない認証すること ユーザー権利を確保するために必要なすべてのチェックを行う)をリフレッシュし クッキーを通じて送り返さ
クッキーの危険性は別として、安全だと思われます。
クッキーをリセットするログアウトREST APIを提供します。したがって、ログインが完了するまで 以降のAPI呼び出しは拒否されます。
API呼び出しを行う必要はありません。単にクッキーまたはlocalStorageオブジェクトを消去して、クライアントが欠落しているトークンを壊さないようにするだけです。
express-jwtモジュールの標準では、トークンがCookieよりも強く推奨される「Authorization:Bearer [Token]」ヘッダーに含まれていると想定しています。 localStorage APIはIE8まで利用できるので、あなたは良いはずです。
編集:
まず彼らはしばしば同じものであると考えられているので、それはXSSとCSRF攻撃の違いを知っておくことが重要です。
XSSは、他のユーザーのブラウザでドメイン上で実行されている安全でないJSをユーザーが取得したときに、localStorageまたはセッション内のJWTとCookie内のJWTのどちらも安全です。 CookieにhttpOnlyフラグを設定すると、直接アクセスすることはできませんが、ブラウザはAJAXリクエストを使用してサーバーに送信します。これが一般的にあなたが運が悪い場合に起こります。これを防ぐには、ブラウザに送信されたすべてのユーザー入力をエスケープしてください。
スクリプトタグやiframeを使用してサードパーティ製のJSを読み込むと、気をつけなければlocalStorageが妥協する可能性がありますが、ここで手伝ってもらえませんでした。
CSRFは、他のドメインがブラウザに自動的にCookieを送信することによって、通常のHTMLフォームをサーバーに送信しようとしている場合にのみ発生します。フレームワークは、一意のランダムな文字列を隠しフィールドとして挿入し、サブミット時にそれらを再度チェックすることでこれを防ぎます。 localStorageのJWTは、各ドメインがそれ自身の別個のlocalStorage領域を取得するので、これから安全です。
しかし、最終的には、サービスが単一のドメインを使用するかどうかによって異なります。この場合、httpOnly Cookieは安全で設定が簡単ですが、api.domainなどの複数のドメインにサービスを広めたい場合.com + app.domain.comを追加するか、localstorageやその他のネイティブストレージエリアにJWTを保存する必要があるネイティブアプリを追加します。
希望すると便利です。
ありがとうございました!ローカルストレージを推奨しているので、XSS攻撃に対するローカルストレージの脆弱性や、それを防ぐための安全な解決方法があるかどうかについてのあなたの意見を知りたいと思っています。私の理解は、現代のWebフレームワークは、CSRF攻撃からそれらを保護する方法でクッキーを処理していました。 –
私のポストを編集するつもりです、委員会は長すぎるです:) –
この答えは悪いOAuthの基本原則を完全に無視します –