DocuSign生产环境集成遇JWT错误:invalid_grant/no_valid_keys_or_signatures
解决DocuSign生产环境JWT令牌请求报错:invalid_grant(no_valid_keys_or_signatures)
为什么私钥在生产环境无效?
- DocuSign生产环境与沙箱(演示)环境完全独立,沙箱集成密钥对应的私钥无法直接复用在生产环境的集成密钥上,生产环境需要为专属集成密钥单独生成密钥对。
- 公钥与私钥不匹配:上传到生产环境集成密钥的公钥,和本地代码使用的私钥并非同一对生成。
- 私钥格式错误:比如PEM文件缺少
-----BEGIN RSA PRIVATE KEY-----或-----END RSA PRIVATE KEY-----标记,或文件内容存在多余空白、换行错误。 - 集成密钥配置问题:生产环境的集成密钥未开启JWT授权,或未关联正确的生产用户ID。
修复步骤
- 重新生成生产环境密钥对
- 登录DocuSign生产环境开发者中心,找到你的生产集成密钥。
- 进入「密钥」选项卡,点击「添加RSA密钥」,系统会自动生成新的公钥和私钥,下载私钥文件并妥善保存(注意:私钥仅能下载一次)。
- 校验密钥匹配性
使用OpenSSL命令验证本地私钥与后台公钥是否一致:
将生成的公钥内容与DocuSign后台集成密钥下的公钥对比,确保完全一致。openssl rsa -in 你的生产私钥文件.pem -pubout -out 生成的公钥.pem - 检查代码配置
确认Node.js代码中:- 加载的是生产环境的私钥文件,路径无误;
iss参数为生产集成密钥ID;sub参数为生产环境的用户ID;aud参数设置为account.docusign.com(生产环境的受众);- Account Base URI使用
https://account.docusign.com。
- 确认集成密钥权限
- 确保生产集成密钥已开启JWT授权;
- 关联的生产用户ID正确,且该用户已对集成密钥完成授权(首次使用可通过管理员预授权,或让用户手动完成授权流程)。
- 验证JWT签名
用jsonwebtoken库的verify方法本地校验生成的JWT:
若校验失败,说明私钥或签名过程存在问题。const jwt = require('jsonwebtoken'); const fs = require('fs'); const publicKey = fs.readFileSync('生产公钥文件.pem', 'utf8'); const token = '你生成的JWT令牌'; jwt.verify(token, publicKey, (err, decoded) => { if (err) console.log(err); else console.log(decoded); });
内容的提问来源于stack exchange,提问作者Charlin Randriamanaja
相关产品推荐
相关产品推荐

