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

使用jsonwebtoken库签名JWT时首次调用失败二次调用成功问题

解决jsonwebtoken首次RS256签名失败、二次调用成功的问题

你的问题根源在于私钥字符串开头的多余换行符:

看你提供的可复现代例,key变量的字符串开头带有一个换行(const key = `\n-----BEGIN RSA PRIVATE KEY-----` ),jsonwebtoken第一次解析这个密钥时,无法正确识别它是有效的RSA非对称密钥,因此抛出secretOrPrivateKey must be an asymmetric key when using RS256错误。第二次调用成功,是因为库内部在首次解析失败后自动对密钥做了格式化处理(比如去除首尾空白),或是在REPL环境下变量被隐式修正了。

解决方法

直接处理密钥格式即可,两种方式任选:

  1. 修改私钥字符串,去掉开头的换行
const key = `-----BEGIN RSA PRIVATE KEY-----
MIIJJwIBAAKCAgEA8zU0rd1bYdSO87arVBUYhguq7NWqSwkh89chRiOpFSU40Fac
aBCg5IAIU/qh25YsMRuBG+WzWg5s+NtbK8cnlT4pCKU7XGG8iMVa04MYC5wOlPY9
...(剩余私钥内容)
-----END RSA PRIVATE KEY-----`
  1. 传入前对密钥做trim处理
    调用jwt.sign时,用trim()去除密钥字符串首尾的空白字符:
const token = jwt.sign({iss: id, client_id: id}, key.trim(), {algorithm:"RS256"});

额外提醒

你代码里有个笔误:client_it应该是client_id,虽然不影响签名生成,但建议修正避免后续业务逻辑出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:14:59