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("無効なトークン"); }