JWTトークンの仕組みを教えてください
JSON Web Toeken(JWT:ジェイダブリューティー)は認証と認可のためのオープンスタンダード(RFC 7519)であり、クライアントとサーバー間で安全かつ堅牢な情報の受け渡しを行う軽量のステートレスな認証メカニズムです。
JWTの仕組みを以下に説明します。
- クライアントはユーザー名とパスワードを利用して、サーバに対して認証要求を行います。
- サーバーはユーザーのID情報を検証し、ユーザー情報を含むJWTを生成します。このJWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。
- ヘッダーには暗号化アルゴリズムとタイプ情報が含まれ、HMAC SHA256 や RSA アルゴリズムで署名されるのが一般的である。
- ペイロードには送信したいユーザ情報が格納され、有効期限(exp)、発行者(iss)など標準のフィールドをカスタマイズできます。
- 署名はサーバーの秘密鍵を使用し、ヘッダーとペイロードに署名することで、JWT が送受信中に改ざんされていないことを保証します。
- サーバーが生成したJWTがクライアントに返されます。
- クライアントは、すべてのリクエストでJWTをリクエストヘッダーまたはパラメーターに入れてサーバーに送信します。
- サーバーは JWT を受信すると、公開鍵を使って JWT の検証と解析を実施します。
- サーバー側で署名の検証やJWTの有効期限などの検証を行う
- 検証結果に基づいて、サーバはユーザにリソースへのアクセスを許可するか否かを決定します。
JWTは簡潔、軽量、拡張性、クロスプラットフォーム、ステートレスといったメリットがあり、JWT自体にユーザ情報が含まれているため、サーバ側でセッション情報をデータベースに保存する必要がない。さらにJWTにはカスタムフィールドを追加して機能を拡張することもでき、シングルサインオンやクロスオリジンリソースシェアリングなどに利用できる。