メインコンテンツまでスキップ

JWT Decoder/Encoder

このエントリーをはてなブックマークに追加

JWT Token

🔐 署名検証

セキュリティのため、入力内容は非表示になります

📋 JWT (JSON Web Token) について

JWT(JSON Web Token)は、情報を安全に伝送するためのコンパクトで自己完結型のトークン形式です。 主にWebアプリケーションでの認証・認可、情報交換に使用されます。

🏗️ JWTの構造

JWTは3つの部分がピリオド(.)で区切られた構造になっています:

Header.Payload.Signature
  • Header(ヘッダー): トークンのタイプ(JWT)と署名アルゴリズム(HS256、RS256など)を指定
  • Payload(ペイロード): 実際のデータ(クレーム)を含む。ユーザー情報、権限、有効期限など
  • Signature(署名): ヘッダーとペイロードが改ざんされていないことを検証するための署名

✨ JWTの特徴

  • 自己完結型: トークン自体に必要な情報が含まれているため、外部データベースへの問い合わせが不要
  • コンパクト: Base64URLエンコーディングによりURL、POSTパラメータ、HTTPヘッダーで簡単に送信可能
  • セキュア: デジタル署名により、送信者の検証とデータの整合性確認が可能
  • 標準化: RFC 7519として標準化されており、多くのプログラミング言語でサポート

🎯 主な用途

  • 認証: ユーザーログイン後のセッション管理
  • 認可: APIアクセス権限の管理
  • 情報交換: システム間での安全な情報伝達
  • SSO(シングルサインオン): 複数サービス間でのユーザー認証

🔒 セキュリティ上の注意点

  • 機密情報をペイロードに含めないでください(JWTは暗号化されていません)
  • 適切な有効期限(exp)を設定してください
  • HTTPSを使用してトークンを送信してください
  • トークンをローカルストレージに保存する際は十分注意してください

🔐 署名機能について

このツールでは、JWT署名の検証をクライアントサイドで実行できます。 複数の検証方法をサポートしており、デモンストレーション目的や開発時のトークン検証に役立ちます。

サポートされている機能:

  • ✅ HMAC-SHA256による署名生成・検証
  • ✅ RSA公開キー(RS256)による署名検証
  • ✅ ECDSA公開キー(ES256)による署名検証
  • ✅ PEM形式の公開キー直接入力
  • ⚙️ JWKS URL指定による公開キー自動取得
  • ✅ Base64URL エンコーディング

⚠️ セキュリティに関する注意

  • HMAC署名機能はデモンストレーション目的です
  • 実際のシークレットキーをブラウザで使用しないでください
  • 公開キー検証は信頼できるキーのみを使用してください

📖 使用方法

  • HMAC検証: 共通のシークレットキーで署名と検証を行います
  • 公開キー検証: RSA/ECDSA公開キーで署名を検証します
  • JWKS検証: サーバーから公開キーを自動取得して検証します

📚 署名検証の実装例

Node.js (jsonwebtoken ライブラリ)
const jwt = require('jsonwebtoken');

// 署名検証
try {
  const decoded = jwt.verify(token, 'your-secret-key');
  console.log('有効なトークン:', decoded);
} catch (err) {
  console.log('無効なトークン:', err.message);
}

// トークン生成(署名付き)
const token = jwt.sign(
  { sub: '1234567890', name: 'John Doe' },
  'your-secret-key',
  { expiresIn: '1h' }
);
Python (PyJWT ライブラリ)
import jwt

# 署名検証
try:
    decoded = jwt.decode(token, 'your-secret-key', algorithms=['HS256'])
    print('有効なトークン:', decoded)
except jwt.InvalidTokenError:
    print('無効なトークン')

# トークン生成(署名付き)
token = jwt.encode(
    {'sub': '1234567890', 'name': 'John Doe'},
    'your-secret-key',
    algorithm='HS256'
)
C# (.NET)
using System.IdentityModel.Tokens.Jwt;
using Microsoft.IdentityModel.Tokens;

// 署名検証
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes("your-secret-key");

try
{
    tokenHandler.ValidateToken(token, new TokenValidationParameters
    {
        ValidateIssuerSigningKey = true,
        IssuerSigningKey = new SymmetricSecurityKey(key),
        ValidateIssuer = false,
        ValidateAudience = false
    }, out SecurityToken validatedToken);
    
    Console.WriteLine("有効なトークン");
}
catch
{
    Console.WriteLine("無効なトークン");
}