JWT の発行とデコード(コマ24)

サーバーが発行した JWT(ドット区切りの3パーツ):

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMDAxIiwibmFtZSI6IueUsOS4rSDlpKrpg44iLCJyb2xlIjoidXNlciIsImlhdCI6MTc5MjQyNjExNywiZXhwIjoxNzkyNDI5NzE3fQ.9jkacBdkcsYjT9DzxvN0j3Nm7SFWMSSd-sVywdlnFsI

■ヘッダー ■ペイロード ■署名

デコードすると…

ヘッダー(Base64URLをデコードしただけ):

{
    "alg": "HS256",
    "typ": "JWT"
}

ペイロード(Base64URLをデコードしただけ):

{
    "sub": "user001",
    "name": "田中 太郎",
    "role": "user",
    "iat": 1792426117,
    "exp": 1792429717
}

重要: ペイロードは 暗号化されていない。Base64URL エンコードされているだけで、 鍵がなくても誰でもデコードして中身を読める。→ パスワードやクレジットカード番号などの 機密情報は絶対に入れてはいけない。

署名は「ヘッダー+ペイロード」をサーバーの秘密鍵で計算したもの。改ざんすると署名が合わなくなる =改ざん検知はできるが、中身を隠す仕組みではない。

自分でも jwt.io のようなツールで 上のトークンを貼り付けるとデコードできる(=誰でも読める、の証拠)。