使用Google Apps Script生成RS256 JWT访问DocuSign时密钥报错如何解决
报错根因
Google Apps Script 内置的 Utilities.computeRsaSha256Signature() 方法不支持直接传入带PEM格式头、尾标识和换行符的私钥,你直接复制的Docusign官方生成的RSA私钥包含了多余格式字符,因此触发Invalid argument: key异常。
修正后的完整可运行代码
function createJWT(){ const header = { alg: 'RS256', typ: 'JWT', }; const now = Date.now(); const expires = new Date(now); expires.setHours(expires.getHours() + 1); const payload = { exp: Math.round(expires.getTime() / 1000), iat: Math.round(now / 1000), iss: "替换为你的Docusign集成密钥(integrator key)", sub: "替换为你的Docusign用户ID(user id)", aud: "生产环境填account.docusign.com,沙箱环境填account-d.docusign.com", scope: "signature impersonation" }; let toSign = Utilities.base64EncodeWebSafe(JSON.stringify(header)) + '.' + Utilities.base64EncodeWebSafe(JSON.stringify(payload)); toSign = toSign.replace(/=+$/, ''); // 填入Docusign给的完整RSA私钥,包含头尾标识 let privateKey = "-----BEGIN RSA PRIVATE KEY-----\n<你的私钥内容>\n-----END RSA PRIVATE KEY-----"; // 清洗私钥:移除格式标识、换行符和多余空格 privateKey = privateKey.replace("-----BEGIN RSA PRIVATE KEY-----", "") .replace("-----END RSA PRIVATE KEY-----", "") .replace(/\n|\r/g, "") .trim(); const signatureBytes = Utilities.computeRsaSha256Signature( toSign, privateKey ); const signature = Utilities.base64EncodeWebSafe(signatureBytes).replace(/=+$/, ''); return toSign + '.' + signature; }
额外注意事项
- 生成JWT后可自行校验有效性,填入对应公钥即可验证签名是否正确
- 调用Docusign获取access token接口时,需将生成的JWT作为请求参数发送,接口返回的access_token有效期为1小时
- 确保你使用的Docusign账号已经完成了应用的同意授权流程,否则会返回权限相关报错
内容的提问来源于stack exchange,提问作者AttiER
相关产品推荐
相关产品推荐

