A: 通常はクライアントに保存されます。 jwt または JSON Web Token は、リクエストの ID 情報と ID 権限を確認するために一般的に使用される認証プロトコルです。 今朝、あるウェブサイトを閲覧していたとき、この質問をしているクラスメイトに会いました。彼は、jwt の保存場所について非常に興味を持っていました。私はたまたま少し前にこのテーマを勉強していたので、招待されなくてもこの質問に答えることに躊躇しません。 その後、調査の結果、サーバーはこのトークンを保存する必要がないことがわかりました。クライアントは保存するだけでよく、どのような方法を使用するかは関係ありません。ユーザーにメモを書いてポケットに入れるように依頼することもできます。 それで、このトークンはどのように機能するのでしょうか? まず、従来のセッション アプローチである、サーバー側のストレージを必要とする操作について説明します。 まず、ユーザーをログインさせるには、サーバー上でログイン テーブルを維持する必要があります。このログイン テーブルは、キャッシュまたはデータベースに配置できます。 フロントエンドの担当者にとって、このプロセスは通常は気付かれません。バックエンドの担当者は、set-cookie と呼ばれる HTTP ヘッダー フィールドを使用して、データをブラウザの Cookie に書き込みます。その後、リクエストを行う際に、ブラウザはリクエスト ヘッダー自体に Cookie を書き込みます。 クライアントがサーバーへのログインを要求すると、サーバーは Cookie 内のセッションを取得し、ログイン テーブルでユーザー情報を検索し、ユーザーの権限を確認して、通常のビジネス インタラクションを完了します。 さて、さまざまな理由から、ログイン テーブルを維持したくありません。どうすればよいでしょうか? しかし、この方法では、ユーザーの情報が露出してしまいます。仲介業者は、このような直接的な要求を最も好みます。仲介業者は、数日間、あなたのサーバー ポートに腰掛けて座り、データベース内のすべての関連情報が他の人に明らかに露出することになります。 これは絶対にうまくいかないので、どうすればいいでしょうか? パスワードを追加して混乱させるだけです。こうすることで、あなたのトークンを入手した人たちはしばらく混乱し、おそらく不注意に立ち去るでしょう。そして、十分に準備された少数の人たち (KPI) だけが、それを解読するのに苦労することになります。 サーバーで復号すると、ユーザー情報が取得されます。同様に、暗号文に有効期限も書き込みます。有効期限が切れると、401 エラーでログイン ページにジャンプします。このようにして、ログイン資格情報のバックエンドストレージを必要としないソリューションが開発されます。 これは、jwt の最も基本的な動作原理です。つまり、ID 情報は安全に保管するためにクライアントに引き渡されます。 jwt によって生成されるトークンは、ヘッダー、ペイロード、署名の 3 つの部分で構成され、小数点「.」で区切られます。 ヘッダー、つまりヘッダー情報はトークンの基本情報を記述し、JSON 形式です。 { "アルゴリズム":"HS256", "タイプ":"JWT" } alg は署名部分を生成するために使用される暗号化アルゴリズムを表し、typ はトークンが jwt タイプであることを示します。 ペイロードはユーザーデータであり、これも json 形式です。ただし、JWT では、仕様上、ペイロードはヘッダーと同じであり、base64 で一度だけエンコードされてトークンに表示されるため、機密データを入れることは推奨されていません。 署名は、このトークンの署名です。通常は、前のヘッダーとペイロードを、自分で定義した秘密鍵文字列とともに暗号化して生成される文字列です。 前述のように、jwt はペイロードの内容を base64 でエンコードするだけなので、攻撃者がコンテンツを変更するのは非常に簡単です。ただし、攻撃者は秘密鍵を知らないため、変更後に正しい署名を生成することはできません。暗号化を使用してリクエストの header.payload を再度検証し、署名と一致しないことを発見します。この時点で、誰かが問題を引き起こしていることを明確に知ることができ、サーバーがダウンしているふりをするために直接 500 を返すことができます。 もちろん、これがどのように機能するかを理解した今、ペイロードを再度暗号化してから gzip 圧縮するなど、独自の不快な仕様を思いつくことは不可能ではありません。 では、jwt を使用する利点は何でしょうか? 最初のポイントは、サーバーがログイン テーブルを維持する必要がないため、特にユーザー数が多い場合にスペースを節約できることです。 jwt を使ってノードが生成したトークンをどこに保存するかについてはこれで終わりです。jwt で生成したトークンをどこに保存するかについての詳細は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Windows に Docker をインストールする詳細なチュートリアル
>>: MySQLデータベースのスケジュールバックアップを実装する方法
私はフロントエンド プロジェクトの開発に常に vscode を使用してきたため、現在ではいくつかの小...
この質問をされたとき、私は無知で頭が真っ白になりました。もちろん、正しく答えられませんでした。私はず...
目次仮想DOM仮想DOMとは何か仮想DOMの役割Vue の仮想 DOM vノードvNodeとはvNo...
問題の起源docker を使用する場合、残念ながら docker コンテナ内のホストのポート 80 ...
説明: 指定された時間内に前のノードのコンテンツを置き換えるタイマーを設定します。 1. キーコード...
目次(1)はじめに: (2)クリップボードの内容をコピーする方法は次のとおりです。 (3)関数演算に...
1. Windows10の組み込みLinuxサブシステムをインストールする1.1. Linuxサブシ...
最近、PHP で Web ページを書いているときに、エンコードを UTF-8 に設定しました。しかし...
目次1. 短絡判定2. オプション連鎖演算子 (?) 3. ヌル合体演算子 (??) 4. 終了関数...
ソースコード(一部のクラスは削除されています):コードをコピーコードは次のとおりです。 <テー...
導入今日は、MySQL の sum 関数の使い方を紹介します。この関数は、MySQL データベースを...
私はプロジェクトを実行するために react を使い始めたばかりで、非常に未熟で完全な初心者です。私...
一部の MySQL テーブルには重複レコードが含まれている場合があります。重複データが存在することを...
クエリキャッシュ1. クエリキャッシュの動作原理クエリ ステートメントを実行する前に、MySQL は...
この記事では、VMware Workstation 14 Pro (仮想マシン) にシステムをインス...