web-dev-qa-db-ja.com

暗号化されたセッションIDを持つlocalStorageのJWT

私が欲しいもの:

  • JWTをlocalStorageに保管します。 JWTには承認に関するクレームが含まれています。
  • JWTが攻撃者に盗まれて使用されることを防ぐ(XSSを使用)
  • CSRFを回避する

XSSを悪用するとJWTが盗まれる可能性があるため、JWTをlocalStorageに格納することは好ましくありません。これは、攻撃者が認証に使用する可能性があります。

クレームに十分なスペースがないため、JWTをhttpのみのcookieに格納することは好ましくありません。

可能な解決策は次のとおりです。

  • SessionIdを使用してhttpのみのcookieを作成する
  • 内部で暗号化された同じsessionIdでJWTをlocalStorageに保存します
  • サーバーで、クレームを使用する前に、JWTのCookieとCookieが一致することを確認します。

このように、JWTが盗まれる可能性がありますが、攻撃者がCookieのsessionIdも持っている場合を除いて、JWTは使用できません。また、Cookieでは認証に不十分なため、CSRFは不可能です。

私の推論に欠陥はありますか?同じことを達成する簡単な方法はありますか?

クライアント側のJSが読み取ることができない場合、httpのみのcookieは強力です。あなたの解決策はかなり健全なようです。私が行う唯一の推奨事項は、ReactJSのようなXSS保護を提供するクライアント側フレームワークを使用することです。または、すべてのHTML文字列入力をサニタイズします。 JWTに短い有効期限を追加することもできます。申し訳ありませんが、私はこれをコメントにしますが、十分な担当者がいません。

3
user172887