JWTデコーダー
JSON Web Tokenのヘッダー、クレーム、有効期限をブラウザ内で読み取ります。デコードのみで、署名は検証しません。
すべてブラウザ内で動作します。アップロード、記録、保存は一切行いません。
これはデコードするだけで、検証はしません。 以下のどの情報も、トークンが本物かどうかを示すものではありません。署名済みトークンを持っていれば誰でもそのクレームを読むことができ、誰でもこれと同じ見た目のトークンを作れます。署名は、ご自身のアプリケーションで、ご自身の鍵を使って検証してください。
トークンを貼り付けると、ヘッダー、クレーム、有効期限を確認できます。デコードはブラウザ内で行われ、トークンは送信も記録も保存もされません。
このツールは署名を確認しません。表示される内容は、トークンが本物であることを何ら意味しません。
仕組み
JSON Web Tokenは、ドットで区切られたbase64urlエンコードの3つの部分からなります。署名アルゴリズムを示すヘッダー、クレームのペイロード、そして最初の2つに対する署名です。最初の2つはエンコードされているだけで暗号化されてはいません。トークンを持っていれば誰でも読めますし、ここで行っているのもまさにそれです。
登録済みの時刻クレームは読みやすい日時で表示されます。`exp`は有効でなくなる時刻、`nbf`は有効になる時刻、`iat`は発行された時刻です。これらをお使いの端末の時計と比べ、トークンが有効期間のどこにあるかを示します。
署名は書かれたとおりに表示し、デコードはしません。署名はテキストではなくバイト列に対するものなので、文字として表示すると何か意味があるかのように見えてしまいます。
例
| ケース | 入力 | 結果 |
|---|---|---|
| 署名なしと宣言するトークン | eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiIxMjM0NTY3ODkwIn0. | alg none, typ JWT, sub 1234567890 |
よくある質問
なぜ署名を検証しないのですか?
検証には署名鍵が必要で、それを求めるページは、システムを守る秘密をウェブサイトに貼り付けるよう求めていることになるからです。もっと微妙な理由もあります。検証しているように見えるデコーダーは、誰が書いたかわからないペイロードを信用するよう誘ってしまいます。検証はご自身のアプリケーションで、ご自身の鍵で行ってください。
JWTは暗号化されていますか?
いいえ。署名付きトークンはエンコードされているだけで、暗号化とは別物です。トークンを持っていれば誰でも、鍵なしですべてのクレームを読めます。トークンの保持者に見られては困るものを、トークンに入れてはいけません。暗号化トークンも存在します(3つではなく5つの部分からなります)が、このツールでは読めません。
アルゴリズムが「none」とはどういう意味ですか?
トークンに署名がまったくないという意味です。JWTに対する最も古い攻撃で、署名を取り除き、`alg`を`none`にして、受け取る側のライブラリが受け入れることを期待するものです。このページはそのようなトークンに警告を出します。自分で作ったものでないなら、敵対的なものとして扱ってください。
トークンがブラウザの外に送られることはありますか?
ありません。デコードはJavaScriptでローカルに実行されます。このツールには共有リンクもありません。リンクにするとトークンがURLに含まれ、ブラウザの履歴やサーバーのログに残ってしまうからです。
知っておきたいこと
- デコードのみです。署名は検証されず、このページのどこにもトークンが本物かどうかは示されません。
- トークンはブラウザ内でデコードされ、送信も記録も保存も一切されません。このツールにはJavaScriptが必要で、JavaScriptがなければデコードはまったく行われません。
- 署名付きトークンは、持っている人なら誰でも読めます。クレームはすべて公開情報として扱ってください。