jwt-security は何をしますか?
JWT認証を実装するためのガイドライン。トークンの生成、検証、保存に関するセキュリティベストプラクティスを提供します。
概要
このスキルは、JSON Web Token(JWT)を使用した認証システムの安全な実装を支援します。一般的なセキュリティの落とし穴を回避し、堅牢な認証フローを構築するための具体的なガイドラインを示します。
対象プラットフォーム
- Claude Code
- Cursor
- Codex
- その他のAIエージェント
セキュリティベストプラクティス
1. トークンの生成
- 署名アルゴリズムにはRS256またはES256を使用する(HS256は避けること)
- 秘密鍵は安全な場所(環境変数またはシークレット管理サービス)に保存する
- トークンには最小限のクレーム(例:
sub、exp、iat、jti)のみを含める - ペイロードに機密情報(パスワード、個人情報など)を含めない
2. トークンの検証
- 署名検証は常にサーバー側で行う
- 有効期限(
exp)を厳密にチェックする - 発行者(
iss)と対象者(aud)を検証する - アルゴリズム固定攻撃を防ぐため、受け入れるアルゴリズムを明示的に指定する
3. トークンの保存
- クライアント側では、アクセストークンをHttpOnly Cookieに保存する(
localStorageは避ける) - リフレッシュトークンはより長い有効期限を持つが、適切なローテーションを行う
- トークンをログやエラーメッセージに含めない
4. 実装例
const jwt = require('jsonwebtoken');
// トークンの生成
function generateToken(userId) {
const payload = {
sub: userId,
iat: Math.floor(Date.now() / 1000),
exp: Math.floor(Date.now() / 1000) + (60 * 60), // 1時間
jti: require('crypto').randomUUID()
};
return jwt.sign(payload, process.env.JWT_SECRET, { algorithm: 'RS256' });
}
// トークンの検証
function verifyToken(token) {
try {
const decoded = jwt.verify(token, process.env.JWT_PUBLIC_KEY, {
algorithms: ['RS256'],
issuer: 'my-app'
});
return decoded;
} catch (err) {
throw new Error('Invalid token');
}
}