JSON Webトークン(JWT)とは?
JSON Webトークン(JWT)は、オープンスタンダード(RFC 7519)であり、JSONオブジェクトとして情報を安全に伝送するためのコンパクトで自己完結的な方法を定義します。この情報はデジタル署名されているため、検証および信頼することができます。JWTは、秘密鍵(HMACアルゴリズムを使用)またはRSAやECDSAを使用した公開鍵/秘密鍵ペアで署名できます。
JWTの構造
JWTは、ドット(.)で区切られた3つの部分から構成されます。トークンを見ると、次のようになります:xxxxx.yyyyy.zzzzz。
- ヘッダー:通常、トークンのタイプ(JWT)と使用される署名アルゴリズム(HMAC SHA256やRSAなど)の2つの部分で構成されます。Base64Urlエンコードされています。
- ペイロード:クレームを含みます。クレームはエンティティ(通常はユーザー)に関するステートメントと追加データ(ロール、ユーザーID、メール、有効期限
expなど)です。これもBase64Urlエンコードされています。 - 署名:署名部分を作成するには、エンコードされたヘッダー、エンコードされたペイロード、秘密鍵、ヘッダーで指定されたアルゴリズムを使用して署名します。これにより、トークンが転送中に改ざんされていないことが保証されます。
オンラインJWTデコーダーの危険性
JWTは非常に機密性が高いです。悪意��ある攻撃者が管理者ユーザーの有効なJWTを傍受した場合、そのユーザーのセッションを乗っ取り、プライベートシステムにアクセスするのは簡単です。 本番環境のJWTをランダムなオンラインツールに貼り付けてはいけません。多くのオンラインデコーダーは、貼り付けられたトークンをバックエンドサーバーに送信し、ログ記録、分析、またはそれ以上の悪用を行います。
当ツールは違います。このデコーダーは純粋なフロントエンドJavaScriptで作成されています。デコード処理(Base64文字列の解析)はすべてブラウザのメモリ内で行われます。インターネットから切断してトークンを貼り付けても、完全にデコードされるため、データがマシンから出ることはありません。
JWTは暗号化されていますか?
ジュニア開発者の間でよくある誤解は、JWTが暗号化されており、ペイロード内のデータを隠しているというものです。そうではありません。標準のJWT(JWS)は単にエンコード(Base64Url)され、暗号学的に署名されているだけです。トークンを傍受した人は誰でも(このようなツールを使って)デコードし、クレームを読むことができます。したがって、パスワード、クレジットカード番号、APIシークレットをペイロードに入れてはいけません。