web-dev-qa-db-ja.com

JWTトークンをCookie、ヘッダー、または本文に保存する必要があります

転送を保存してJWTトークン、または一般的に認証トークンを保存する最も安全な方法は何ですか?

誰かが認証トークンをCookieとして送信することは安全だと私に言ったが、ブラウザーがすべての送信要求にそのCookieを含めるので、認証にプレーンセッションID Cookieを使用するだけで追加のセキュリティがどのように提供されるか理解していない。私は何かを誤解しましたか?

私にとってはるかに意味があるのは、トークンが応答ヘッダーまたは本文に格納され、クライアント側でプログラムによって抽出され、各要求に手動で追加される場合です。 HTTPS接続を介してトークンを傍受する方法はなく、CSRF攻撃は不可能になります(とにかくCSRFトークンを使用します)。もちろん、認証トークンはXSS攻撃によって引き続きアクセスされる可能性がありますが、Cookieもこの攻撃を受けやすいのではないですか?

Cookie内のトークンが、単純なセッションID Cookieに基づく認証に追加のセキュリティを提供する方法がわかりませんか?一部の情報が不足していますか?

7
Tuomas Toivonen

トークンをCookieに入れ、そのCookieをHttpOnlyに設定することで、悪意のあるクライアント側スクリプト(XSSなど)によるCookieへのアクセスを防ぐことができます。JavaScriptからHttpOnly Cookieにアクセスすることはできません。ブラウザはそれを保護し、送信を処理します正しいオリジンのみへのクッキー。

https://www.owasp.org/index.php/HttpOnly

6
crovers

それでは、JWTの概要(Webサイトから引用)から始めましょう。

JSON Web Tokenは、2つの当事者間で安全にクレームを表すためのオープンな業界標準RFC 7519メソッドです。

JWT.IOを使用すると、JWTをデコード、検証、および生成できます。

JWTの目標は、データを非表示にすることではなく、身元をサーバーに証明することです。誰でもトークンをデコードできますが、秘密鍵が必要なため、偽のトークンを作成することはできません。誰もあなたの秘密鍵を知らないので(私は願っています!)、偽のトークンをデコードしようとすると、サーバーは例外をスローします。

通常、トークンは次のようなAuthorizationヘッダーで送信されます。

Authorization: Bearer <the token>

そして、あなたの言語に応じて、ヘッダーを解析して必要な情報を抽出する多くのライブラリがあります。

2
Tom

クローバーが言ったように、JavaScriptでHttpOnly Cookieにアクセスすることはできません。

Cookie内のトークンが、単純なセッションID Cookieに基づく認証に追加のセキュリティを提供する方法がわかりませんか?一部の情報が不足していますか?

そうではありません。 JWTのポイントは、セッションIDよりも安全であることではありません。 JWTの利点は、サーバー側に何も保存する必要がないことです。セッションIDではセッションをどこかに保存する必要がありますが、JWTではセッションデータはJWT内に保存されます。

1
FINDarkside