0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JWT (JSON Web Token) とは?(メモ)

Posted at

はじめに

JWT (JSON Web Token) は、ユーザーの認証情報を含むデータを安全にやり取りするためのトークン形式 です。
Cognito では、ユーザー認証後に JWT トークン (AccessToken, IDToken, RefreshToken) を発行します。


🔹 JWT トークンの構造

JWT は以下の 3つの部分 で構成されます。

eyJhbGciOiJSUzI1NiIsImtpZCI6IjkzMGE4ZTQ4NyJ9
.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvZSIsImlhdCI6MTUxNjIzOTAyMn0
.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

📌 3つの部分

部分 説明
1. ヘッダー (Header) 使用するアルゴリズムやトークンの種類を定義
2. ペイロード (Payload) ユーザー情報や権限 (claims) を含む
3. 署名 (Signature) トークンの改ざんを防ぐための署名

🔹 Cognito で発行される JWT トークンの種類

1️⃣ AccessToken

  • API Gateway で認証するときに使用
  • Cognito ユーザープールで発行される
  • 有効期限 (デフォルト: 1時間)

2️⃣ IDToken

  • ユーザー情報 (メール, 名前など) を含む
  • フロントエンドアプリでユーザー情報を取得するときに使用

3️⃣ RefreshToken

  • アクセストークンの有効期限が切れた際に、新しいトークンを取得するために使用
  • 有効期限 最大 30日

🔹 JWT トークンの内容を確認

Cognito で取得した AccessToken をデコードすると、以下のような情報が含まれています。

📌 JWT デコード方法 (コマンドライン)

echo $ACCESS_TOKEN | awk -F. '{print $2}' | base64 -d | jq .

📌 JWT デコード結果 (例)

{
  "sub": "1234567890",
  "iss": "https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_XXXXXXXXX",
  "client_id": "4rap65b59one3tf6j36ec4b21d",
  "username": "example_user",
  "exp": 1742310338,
  "iat": 1742306738
}

ポイント

  • "sub" → ユーザーID
  • "iss" → トークン発行元 (Cognito の URL)
  • "client_id" → このトークンが発行されたクライアント ID
  • "exp" → トークンの有効期限 (UNIX 時間)
  • "iat" → トークンが発行された時間 (UNIX 時間)

🔹 Cognito で JWT トークンを取得

1️⃣ ユーザーログインして AccessToken を取得

ACCESS_TOKEN=$(curl -X POST \
    -H "Content-Type: application/x-amz-json-1.1" \
    -H "X-Amz-Target: AWSCognitoIdentityProviderService.InitiateAuth" \
    --data @- https://cognito-idp.ap-northeast-1.amazonaws.com/ <<EOF | jq -r '.AuthenticationResult.AccessToken'
{
    "AuthFlow": "USER_PASSWORD_AUTH",
    "ClientId": "your-app-client-id",
    "AuthParameters": {
        "USERNAME": "your_username",
        "PASSWORD": "your_password"
    }
}
EOF
)

2️⃣ AccessToken を API Gateway に送信

curl -X POST \
    -H "Authorization: Bearer $ACCESS_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{"action": "convert"}' \
    https://your-api-id.execute-api.ap-northeast-1.amazonaws.com/Prod/convert

🔹 JWT トークンのメリット

トークンの検証だけでユーザーを認証できる (データベース不要)
トークンの改ざんができない (署名付き)
異なるサービス間 (API Gateway, Lambda) で統一した認証を実装できる


🚀 まとめ

項目 説明
JWT とは? 認証情報を含むセキュアなトークン
トークンの構造 Header.Payload.Signature の 3つの部分で構成
AccessToken の用途 API Gateway で認証に使用
トークンの取得方法 Cognito にログインして取得
API にトークンを送信 Authorization: Bearer <TOKEN> をヘッダーに設定
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?