JWT
「JSON Web Token」を表します。
JWTは、2者間でセキュリティ情報を共有する、業界標準のトークンです。JWTはコンパクトでURLセーフなため、Webサーバーとクライアントは、HTTPSリクエストの一部としてJWTを交換できます。JWTの最も一般的な用途は、シングルサインオン(SSO)サービスなどを通じて、WebサイトやWebアプリにサインインしたユーザーを認証することです。
JWTは次の3つの部分で構成されます。
- ヘッダーには、トークンの種類と、署名の生成に使用したアルゴリズムに関する情報が含まれます。
- ペイロードには、トークンが示すクレームの一覧が含まれます。通常、クレームには、トークンの発行者、トークンを使用するWebサイトまたはWebアプリ、ユーザーに関する情報が含まれます。また、トークンが発行された時刻と有効期限も含まれますどちらも(エポック時刻を使用します)。これらの一般的な値に加えて、JWTには、トークンを発行するWebサイトまたはWebアプリ固有の任意のクレームを含めることもできます。
- 署名は、トークンが発行されてから改ざんされていないことを検証します。
WebサイトやWebアプリでは、ユーザーを認証するためのステートレスな方法としてJWTを使用することがよくあります。この方法では、サーバーがメモリやデータベースにセッションを保持する必要がないため、ユーザーごとに必要なオーバーヘッドを削減できます。その代わりに、クライアントとサーバーは各HTTPSリクエストでJWTをやり取りし、署名を検証してトークンが変更されていないことを確認します。JWTの有効期限が切れると、ユーザーは新しいJWTを発行してもらうために、もう一度サインインする必要があります。
JWTの作成
JWTのヘッダーとペイロードはどちらもJSONで書かれたテキストで構成されます。ヘッダーとペイロードはそれぞれ、base64というアルゴリズムを使用して個別にエンコードされ、数行のテキストが1つの文字列に変換されます。エンコードされたヘッダーとペイロードの文字列を結合し、「.」文字で区切ります。
エンコードされたヘッダーとペイロードを含む結合後の文字列は、ハッシュアルゴリズムと秘密鍵を使用してもう一度エンコードされ、署名が作成されます。次に、別の「.」文字で区切って、署名をヘッダーとペイロードの末尾に追加し、最終的なJWTを作成します。
知識をテストする