JWT とは?
JWT(JSON Web Token)はログインの認証情報によく使われる形式で、. で区切られた 3 つの Base64URL からなります:header.payload.signature。header は署名のアルゴリズム、payload はユーザー情報や有効期限などの「クレーム」、signature は内容が改ざんされていないことを確認するためのものです。
使い方
- 左に JWT を貼り付けます(先頭の
Bearerがあっても構いません)。右側にすぐ header、payload、有効期限の状態が表示されます。 iat(発行日時)、nbf(有効開始)、exp(有効期限)は、お使いのタイムゾーンの日時に変換されます。- HS256、HS384、HS512 の場合は、シークレットキーを入力すると署名が正しいかを検証できます。
例
「サンプルを読み込む」で読み込まれる JWT の payload をデコードすると:
{
"sub": "1234567890",
"name": "Mike",
"role": "admin",
"iat": 1700000000,
"exp": 4102444800
}
これはシークレットキー toolpivo-secret で署名した HS256 のトークンです。
よくある質問
JWT の内容は暗号化されていますか?
いいえ。header と payload は Base64URL でエンコードされているだけで、トークンを手に入れた人は誰でも内容を読めます。payload にパスワードなどの機密情報を入れないでください。署名は内容が変更されていないことを証明するだけで、内容を隠すものではありません。
ここにトークンを貼り付けても安全ですか?
デコードと検証はすべてブラウザ内で行われ、トークンとシークレットキーがサーバーに送信されることはなく、ブラウザに保存されることもありません。ただし本番環境のトークンは、使い終わったら失効させることをおすすめします。
RS256 を検証できないのはなぜ?
RS256 や ES256 などは秘密鍵で署名し、発行者の公開鍵で検証するアルゴリズムです。このツールは現在、同じシークレットキー(共通鍵)で署名と検証を行う HS256、HS384、HS512 のみに対応しています。
exp の単位は?
JWT の標準(RFC 7519)では、exp、iat、nbf はいずれも「秒」単位の Unix タイムスタンプで、ミリ秒ではありません。