You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用OpenSSL在终端验证Auth0 JWT签名?实操失败排查

解决OpenSSL手动验证JWT签名失败的问题

我之前也踩过类似的坑!你在jwt.io上能正常验证,但用OpenSSL手动操作就返回失败,问题出在两个容易被忽略的细节上:

你的操作里的关键错误

  1. Base64URL转标准Base64时缺失填充字符
    JWT使用的Base64URL格式会去掉末尾的=填充符,但标准Base64解码必须依赖这些填充才能正确解析。你当前的转换命令只替换了-和_,没有补充必要的=,导致签名解码可能不完整。

  2. echo自动添加了多余换行符
    当你用echo $DAT_B64输出header+payload部分时,默认会在末尾追加一个\n换行符,但JWT的签名是基于完全无换行的原始字符串计算的。这就导致你验证的内容和签名生成时的内容不一致,自然验证失败。

修正后的完整操作步骤

把这两个问题修复后,完整的命令如下:

# 读取JWT并转换为标准Base64(自动补充必要的=填充)
TOKEN_B64=$(cat token.b64url | tr '-' '+' | tr '_' '/' | awk '{while(length%4) $0=$0"="; print}')

# 分离签名部分并解码到文件
SIG_B64=$(echo $TOKEN_B64 | cut -d. -f3)
echo -n $SIG_B64 | base64 -d > sig.dat

# 分离header和payload的组合部分
DAT_B64=$(echo $TOKEN_B64 | cut -d. -f1-2)

# 验证签名(用echo -n避免添加换行符)
echo -n $DAT_B64 | openssl dgst -sha256 -verify public_key.pem -signature sig.dat

执行这些命令后,应该就能得到你预期的Verification OK结果了。

内容的提问来源于stack exchange,提问作者KimKong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 07:22:46