ユーザーのログイン
- ユーザーはログインフォームにユーザー名とパスワードを入力します。
- フロントエンドアプリケーションはこれらの認証情報をバックエンドサーバーに送信します。
サーバーでの認証
- バックエンドサーバーは、受け取ったユーザー名とパスワードを検証します。
- 認証情報が正しい場合、サーバーはユーザーに対応するJWTを生成します。このJWTには、ユーザーIDやロール、トークンの有効期限などの情報が含まれます。
JWTの発行
- サーバーは生成したJWTをクライアントに返します。通常、これはHTTPレスポンスのボディに含まれます。
クライアント側でのJWT保存
- クライアントは、受け取ったJWTを保存します。一般的には、ブラウザのローカルストレージやセッションストレージに保存されますが、セキュリティを考慮してクッキーに保存することもあります。
認証されたリクエストの送信
- クライアントは、保護されたリソースにアクセスする際に、保存されたJWTをHTTPヘッダーに含めてリクエストを送信します。このヘッダーは通常、以下のように設定されます:
Authorization: Bearer <JWT>
サーバー側でのJWT検証
サーバーは受け取ったリクエストのJWTを検証します。具体的には、以下の手順を行います:
-
トークンの構文解析:
- トークンをデコードし、ヘッダーとペイロードを抽出します。
-
署名の検証:
- ヘッダーのアルゴリズムを使って、トークンの署名が正しいかを確認します。これにより、トークンが改ざんされていないことを確認します。
-
トークンの有効期限の確認:
- ペイロードの
exp
クレームを確認し、トークンがまだ有効であることを確認します。
- ペイロードの
-
その他のクレームの検証:
- 必要に応じて、その他のクレーム(例えば、ユーザーIDやロール)を検証します。
リクエストの処理
- トークンが有効である場合、サーバーはリクエストを認証されたユーザーとして処理します。
- トークンが無効である場合、サーバーは適切なエラーレスポンス(例えば、401 Unauthorized)を返します。
まとめ
この記事が、JWTを使用した認証フローの基本的な理解に役立てば幸いです。