使い方
- ヘッダー(JSON)とペイロード(JSON)を書きます。iatを現在時刻に設定、nbfを現在時刻に設定、expを今からの期間で設定を使うと、時刻を入力できます。
- アルゴリズムを選び、秘密の鍵を入力します。鍵がBase64で書かれている場合は、鍵の形式でBase64を選んでください。
- トークンをコピーします。ヘッダー、ペイロード、署名の、ドットで区切られた3つの部分からなります。
- 確認するトークンにトークンを貼り付けると、その署名が上の鍵と一致するかを確認できます。
JWTの署名の仕組み
JSON Web Token(RFC 7519)は、ヘッダーとペイロードからなり、それぞれJSONとして書かれ、Base64url(RFC 7515)で符号化され、ドットでつながれます。署名は、その2つの部分に対する、秘密の鍵によるHMACです(RFC 7518のセクション3.2)。ヘッダーはalgフィールドにアルゴリズムを書き、このページはそのフィールドを選んだアルゴリズムに設定します。
ページは、各JSONのオブジェクトを符号化する前にコンパクトな形で書くため、署名されるバイト列は、入力した内容の空白や改行を除いたコンパクトな形です。トークンを確認する相手は受け取ったバイト列で作業するため、どちらの形でもトークンは有効です。
署名入力 = BASE64URL(ヘッダー) . BASE64URL(ペイロード)
署名 = HMAC-SHA-256(鍵, 署名入力)
(HS384とHS512は、HMAC-SHA-384とHMAC-SHA-512を使います)
トークン = 署名入力 . BASE64URL(署名)
ペイロードの時刻
クレームのiat(発行時刻)、nbf(有効開始時刻)、exp(有効期限)は、NumericDateです。1970年1月1日00:00 UTCからの秒数です(RFC 7519のセクション2と4.1)。トークンは、exp以降と、nbfより前には受け付けられません。ボタンはお使いの端末の時計から時刻を書くため、時計が誤っていると時刻も誤ります。
確認でできること、できないこと
確認は、貼り付けられたヘッダーとペイロードから、HMACを正確に再計算し、署名と比べます。alg noneや、HS256、HS384、HS512以外のアルゴリズムは拒否するため、トークンが弱い確認を選ぶことはできません。
クレームの意味は確認しません。例えば、issが期待する発行者かどうか、audがあなたのサービスを指すかどうかは確認しません。それらは、RFC 8725が推奨するとおり、アプリケーションが確認しなければなりません。
計算例:HS256、秘密の鍵your-256-bit-secret
ヘッダー{"alg": "HS256", "typ": "JWT"}、ペイロード{"sub": "1234567890", "name": "Ada Lovelace", "iat": 1516239022}、UTF-8の鍵your-256-bit-secretを使うと、このページは次のトークンを作ります:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFkYSBMb3ZlbGFjZSIsImlhdCI6MTUxNjIzOTAyMn0.nmm0qepYRjhNji3O-jq8Pvcr7l_me1_bomw4EJucQCU
同じ鍵で確認すると、署名は有効と示されます。このトークンにはexpもnbfもないため、どの時刻でも無効にはなりません。ほかの鍵で確認すると、署名が一致しないと示されます。
よくある質問
秘密の鍵はサーバーに送られますか?
いいえ。トークンはお使いのブラウザ自身のSubtleCryptoを使って、ブラウザの中で署名されます。鍵はページが開いている間だけ保持され、送信も保存も記録もされません。
このページは署名が一致すると示すのに、ライブラリがトークンを拒否するのはなぜですか?
ライブラリは、expやnbfの時刻、対象者や発行者を確認しているかもしれません。または、鍵を別の形式で読んでいるかもしれません。ライブラリと同じ方法で、鍵を文字列のUTF-8またはBase64として読み、正しい時計で時刻を比べてください。
alg noneが拒否されるのはなぜですか?
alg noneのトークンには署名がないため、誰でも作れてしまいます。サービスはそれを拒否しなければなりません。このページは確認のときにそれを拒否し、署名のときは常にHMACのアルゴリズムを書きます。
鍵の長さはどのくらいにすべきですか?
ハッシュの出力と同じ長さ以上にしてください。HS256は32バイト、HS384は48バイト、HS512は64バイトです(RFC 7518のセクション3.2)。鍵が短い場合は、ページが警告します。
このページでRS256やES256のトークンを作れますか?
いいえ。このページが署名と確認に使うのは共有の鍵だけで、HS256、HS384、HS512です。秘密のRSAやECDSAの鍵で署名したトークンには、その鍵が必要ですが、このページは受け付けません。
鍵をBase64で入力するのはいつですか?
鍵がBase64で書かれている場合だけです。例えば、JSON Web Keyのk値です。それ以外の場合は、入力したとおりに、空白を含めてUTF-8の文字列として読まれます。
出典
- RFC 7519:JSON Web Token(JWT)(英語)
- RFC 7515:JSON Web Signature(JWS)、付録A.1のテストベクター(英語)
- RFC 7518:JSON Web Algorithms(JWA)、セクション3.2(英語)
- RFC 8725:JSON Web Tokenのベストプラクティス(英語)
数値と文章の最終確認日:2026年11月10日火曜日。