SuperAPI AI 工具集

jwt-encode

安全与审计

查看项目

更新于 10-15 12:16

技能介绍

用途

JWT Encode 用于在测试和开发过程中创建并签名 JSON Web Token(JWT)。当用户希望生成、创建、构建或签名 JWT 时使用,例如“create a JWT”这类请求。

主要能力

  • 收集输入:声明/载荷(claims/payload)、算法(默认 HS256)、密钥(secret 或 key)、过期时间(默认 1 小时)。
  • 构建 header:{"alg": "HS256", "typ": "JWT"},若提供 kid 则一并加入。
  • 构建 payload:除非用户明确选择不包含,否则始终加入 iat 和 exp,并添加用户指定的声明。
  • 使用当前可用的最佳方法对 token 进行签名。
  • 展示结果:完整的 JWT 字符串,以及 header 与 payload 的解码明细。

使用方式

签名方法按顺序选择第一个可用的方式,使用用户的声明、密钥和算法(示例仅为模板)。密钥始终通过内联环境变量传入,以避免暴露在 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。
  • 需要验证不同算法(如 HS256)或不同声明组合下的 token 结构。
  • 需要非对称密钥(RSA、ECDSA P-256)进行签名测试。

限制与安全规则

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