JWTが盗まれたらどうなるか?質問する

JWTが盗まれたらどうなるか?質問する

RESTful API に JWT を使用してステートレス認証を実装しようとしています。

私の知る限り、JWT は基本的に、REST 呼び出し中に HTTP ヘッダーとして渡される暗号化された文字列です。

しかし、リクエストを見てトークンを盗む盗聴者がいたらどうなるでしょうか? その場合、盗聴者は私の ID を使ってリクエストを偽造できるのでしょうか?

実際、この懸念はすべてのトークンベースの認証に当てはまります。

それを防ぐにはどうしたらいいでしょうか? HTTPS のような安全なチャネルですか?

ベストアンサー1

私は認証をかなり詳細に扱うノードライブラリの作者です。エクスプレスストームパスですので、ここでいくつか情報をお伝えしたいと思います。

まず、JWT は通常は暗号化されません。JWT を暗号化する方法はありますが (以下を参照)、JWEs) ですが、さまざまな理由から、実際にはあまり一般的ではありません。

次に、あらゆる形式の認証 (JWT を使用するかどうかに関係なく) は、中間者攻撃 (MitM 攻撃) の対象となります。これらの攻撃は、インターネット経由でリクエストを行う際に、攻撃者がネットワーク トラフィックを確認できる場合に発生します。これは、ISP や NSA などが確認できるものです。

SSL は、認証時にコンピュータからサーバーへのネットワーク トラフィックを暗号化することで、ネットワーク トラフィックを監視している第三者が、サーバーの秘密 SSL キーのコピーを何らかの方法で取得しない限り (可能性は低いですが)、トークン、パスワードなどを見ることができないという事態を防止します。これが、SSL がすべての認証形式で必須である理由です。

しかし、誰かがあなたの SSL を悪用してトークンを表示できるとしたら、その質問に対する答えは「はい」であり、攻撃者はそのトークンを使用してあなたになりすまし、あなたのサーバーにリクエストを送信できるようになります

ここでプロトコルが登場します。

JWT は認証トークンの 1 つの標準にすぎません。ほとんど何にでも使用できます。JWT が優れているのは、追加情報を埋め込むことができ、誰も変更していないことを検証できる (署名) ことです。

ただし、JWT 自体は「セキュリティ」とは何の関係もありません。実質的には、JWT は API キーとほぼ同じものです。つまり、どこかのサーバーに対して認証するために使用するランダムな文字列にすぎません。

あなたの質問をさらに興味深いものにしているのは、使用されているプロトコル(おそらく OAuth2)です。

OAuth2 の仕組みは、認証のためにクライアントに一時的なトークン (JWT など) を短期間のみ提供するように設計されています。

トークンが盗まれた場合、攻撃者はそれを短期間しか使用できないという考え方です。

OAuth2 では、ユーザー名/パスワードまたは API 認証情報を入力して、代わりにトークンを取得することにより、定期的にサーバーで再認証する必要があります。

このプロセスは定期的に行われるため、トークンは頻繁に変更され、攻撃者が大きな手間をかけずに継続的にあなたになりすますことが難しくなります。

これが役に立つといいのですが^^

おすすめ記事