mcpField
J
jwt-encode

jwt-encode

github.com/jsonwebtoken安全20617 次安装29 周前更新
代码仓库

关于 jwt-encode

jwt-encode 是用于测试和开发的 JWT 创建与签名技能。它指导设置声明、算法、密钥和有效期,并输出令牌及解码后的头部和载荷,同时强调安全处理密钥。

主要功能

  1. 01创建并签名 JWT
  2. 02配置声明与算法
  3. 03自动添加 iat 和 exp
  4. 04显示解码后的头部和载荷
  5. 05密钥安全处理规则

适用场景

  1. 01创建开发测试令牌
  2. 02检查自定义声明和有效期
  3. 03生成非对称签名测试密钥

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jsonwebtoken/jwt-skills --skill jwt-encode

安装后在 Claude Code 中输入/jwt-encode确认已加载。

详细介绍

JWT 编码

创建并签署 JWT,用于测试和开发。

步骤

  1. 收集输入:声明/载荷、算法(默认:HS256)、密钥或密钥材料、过期时间(默认:1 小时)。
  2. 构建标头:{"alg": "HS256", "typ": "JWT"}。如果提供了 kid,则添加它。
  3. 构建载荷:除非用户选择不包含,否则始终包含 iat 和 exp。添加用户指定的声明。
  4. 签署令牌,使用最佳可用方法(见下文)。
  5. 显示结果:完整 JWT 字符串,以及标头和载荷的解码内容。

签署方法

选择第一个可用的方法。使用用户提供的声明、密钥和算法——以下示例仅供参考。始终通过内联环境变量传递密钥,避免密钥暴露在 shell 历史记录中。

Node.js(首选):

首先,确保 jose 可用——如果缺少,则全局安装:

node --input-type=module -e "await import('jose')" 2>/dev/null || npm install -g jose

然后签署令牌:

JWT_SECRET='user-provided-secret' node --input-type=module -e "import {SignJWT} from 'jose'; console.log(await new SignJWT({sub:'1234567890'}).setProtectedHeader({alg:'HS256'}).setIssuedAt().setExpirationTime('1h').sign(new TextEncoder().encode(process.env.JWT_SECRET)))"

Python:

JWT_SECRET='user-provided-secret' python3 -c "import jwt,time; print(jwt.encode({'sub':'1234567890','iat':int(time.time()),'exp':int(time.time())+3600}, __import__('os').environ['JWT_SECRET'], algorithm='HS256'))"

Bash(仅限 HMAC-SHA256):

header=$(printf '{"alg":"HS256","typ":"JWT"}' | openssl base64 -e -A | tr '+/' '-_' | tr -d '=')
payload=$(printf '{"sub":"1234567890","iat":1700000000,"exp":1700003600}' | openssl base64 -e -A | tr '+/' '-_' | tr -d '=')
signature=$(printf '%s.%s' "$header" "$payload" | openssl dgst -sha256 -hmac "$JWT_SECRET" -binary | openssl base64 -e -A | tr '+/' '-_' | tr -d '=')
printf '%s.%s.%s\n' "$header" "$payload" "$signature"

生成测试密钥

仅在用户需要非对称密钥时执行:

# RSA
openssl genrsa -out private.pem 2048 && openssl rsa -in private.pem -pubout -out public.pem
# ECDSA P-256
openssl ecparam -genkey -name prime256v1 -noout -out private-ec.pem && openssl ec -in private-ec.pem -pubout -out public-ec.pem

安全规则

  • 绝不要将密钥作为命令行字面参数传递。 使用环境变量($JWT_SECRET)或文件输入(--secret-file)。命令参数会显示在 shell 历史记录和 ps 输出中。
  • 未经用户同意,绝不要安装软件包。 不要静默使用 npx -y 或 pip install。
  • 如果用户未提供密钥,请使用 openssl rand -base64 32 生成一个随机密钥,并明确标注仅供测试使用。
  • alg: none——如果用户提出此要求,请警告这会创建一个可通过 CVE-2015-9235 加以利用的未签名令牌。只有在用户明确确认后才创建。
  • 生成的密钥文件——提醒用户完成后删除测试密钥。绝不要将密钥写入受版本控制的目录。

评论

支持 Markdown