[解決済み】JWTが盗まれたらどうする?
質問
RESTful APIのために、JWTによるステートレス認証を実装しようとしています。
AFAIKでは、JWTは基本的に、REST呼び出し中にHTTPヘッダーとして渡される暗号化された文字列です。
しかし、もし盗聴者がいて、そのリクエストを見て トークンを盗む ? そして、彼は私のアイデンティティでリクエストを偽造することができるのでしょうか?
実は、この懸念はすべての トークンベース認証 .
それを防ぐには?HTTPSのような安全なチャンネル?
解決方法は?
私は、認証をかなり深く扱うノード・ライブラリの作者です。 express-stormpath ということで、ここで少し情報を提供させていただきます。
まず、JWTは通常 NOT は暗号化されています。JWTを暗号化する方法はありますが(参照。 JWEs ) が、多くの理由から、実際にはあまり一般的ではありません。
次に、(JWTを使うかどうかにかかわらず)どのような形式の認証も、MitM攻撃(man-in-the-middle)の対象になります。この攻撃は、あなたがインターネット上でリクエストを行う際に、攻撃者があなたのネットワークトラフィックを見ることができる場合に起こります。これは、あなたのISPやNSAなどが見ることができるものです。
SSLは、認証の際に、コンピュータからサーバーまでのネットワークトラフィックを暗号化することで、ネットワークトラフィックを監視している第三者が、サーバーの秘密SSL鍵のコピーを入手できない限り、トークン、パスワード、その他を見ることができないようにしています(可能性は低いです)。このような理由から、SSLはあらゆる形式の認証に必須なのです。
しかし、誰かがあなたのSSLを悪用して、あなたのトークンを見ることができたとしましょう。 はい 攻撃者は 意志 は、そのトークンを使ってあなたになりすまし、あなたのサーバーにリクエストをすることができるようになります。
さて、ここからがプロトコルの出番です。
JWTは、認証トークンの1つの規格に過ぎません。JWTはほとんど何にでも使用できます。JWTがクールなのは、そこに余分な情報を埋め込むことができ、誰もそれをいじっていないことを検証できる(署名)ためです。
しかし、JWTそのものは「セキュリティ」とは何の関係もない。どこから見ても、JWTはAPIキーとほぼ同じもので、どこかのサーバーに対して認証するために使うランダムな文字列に過ぎません。
あなたの質問がより興味深いのは、使用されているプロトコル(おそらくOAuth2)です。
OAuth2の仕組みは、クライアントに短期間だけ認証用の一時的なトークン(JWTのようなもの!)を与えるために設計されています。
トークンが盗まれても、攻撃者は短期間しか使えないということです。
OAuth2では、ユーザー名とパスワード、またはAPIの認証情報を入力してサーバーと再認証を行い、それと引き換えにトークンを取得する必要があります。
このプロセスは時々行われるため、トークンは頻繁に変更され、攻撃者は多大な労力をかけずに常にあなたになりすますことが難しくなります。
お役に立てれば幸いです^^。
関連
-
[解決済み] smbclient NT_STATUS_ACCESS_DENIED
-
[解決済み] LDAPサーバをベースDNとする。
-
[解決済み] Google OAuth 2 認証 - エラー: redirect_uri_mismatch
-
[解決済み] JWT(JSONウェブトークン)の有効期限を自動的に延長する機能
-
[解決済み] JWT認証とOAuth認証の主な違いは何ですか?
-
[解決済み] Google OAuth 2 認証 - エラー: redirect_uri_mismatch
-
[解決済み】REST認証スキームの安全性
-
[解決済み] トークン認証とCookieの比較
-
[解決済み] ステートレス(=セッションレス)認証の場合、CSRFトークンは必要ですか?
-
[解決済み] OpenIDとOAuthの比較 [重複]について
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Google OAuth 2 認証 - エラー: redirect_uri_mismatch
-
[解決済み] GitHub アカウントのユーザー名を変更する
-
[解決済み] OpenIDとOAuthの違いは何ですか?
-
[解決済み] ユーザー名とパスワードでMongoDBを保護する方法
-
[解決済み】OAuth2の「暗黙の」フローはとてもうまく機能しているのに、なぜ「認証コード」フローがあるのですか?
-
[解決済み】Goの認証はどのように管理されているのでしょうか?[クローズド]
-
[解決済み】Cookieベースの認証はどのように機能するのですか?
-
[解決済み】JWTが盗まれたらどうする?
-
[解決済み] トークン認証とCookieの比較
-
[解決済み] Refresh Token "の目的は何ですか?