不使用jwt.io如何实现DocuSign JWT自动续期获取有效access_token
DocuSign JWT认证自动续期可行方案
你碰到的expired_grant报错是JWT本身过期导致的:DocuSign要求JWT的签发时间iat和过期时间exp间隔不能超过1小时,且JWT授权模式不返回refresh_token,所以每次申请新的access_token都必须生成带全新时间戳、合法RSASHA256签名的JWT作为assertion参数。不需要啃SDK写代码,以下几个方案都可以摆脱手动改jwt.io的操作:
方案1:Postman内置脚本自动生成JWT(零额外工具,适配你现有操作习惯)
全程只需要配置一次,之后每次发请求自动生成最新的合法JWT:
- 先把固定配置存在Postman环境变量中:
docusign_rsa_private_key:你之前生成JWT用的RSA私钥,必须带开头的-----BEGIN RSA PRIVATE KEY-----和结尾的-----END RSA PRIVATE KEY-----docusign_integration_key:你的DocuSign应用集成密钥(IK)docusign_api_username:你的DocuSign API账号对应的用户IDdocusign_auth_host:测试环境填account-d.docusign.com,生产上线后填account.docusign.com
- 打开你之前调用token接口的Postman请求,切换到「Pre-request Script」标签,贴入以下脚本:
const privateKey = pm.environment.get("docusign_rsa_private_key"); const integrationKey = pm.environment.get("docusign_integration_key"); const userId = pm.environment.get("docusign_api_username"); const aud = pm.environment.get("docusign_auth_host"); const header = { alg: "RS256", typ: "JWT" }; const now = Math.floor(Date.now() / 1000); const payload = { iss: integrationKey, sub: userId, aud: aud, iat: now, exp: now + 3300, // 55分钟有效期,提前刷新避免临界时间过期 scope: "signature impersonation" }; // 编码处理 function base64url(str) { return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(str)) .replace(/\+/g, '-') .replace(/\//g, '_') .replace(/=+$/, ''); } const unsignedToken = `${base64url(JSON.stringify(header))}.${base64url(JSON.stringify(payload))}`; // 内置加密库生成RS256签名 const signer = new KJUR.crypto.Signature({"alg": "SHA256withRSA"}); signer.init(privateKey); signer.updateString(unsignedToken); const sigHex = signer.sign(); const signature = hextob64u(sigHex); const signedJwt = `${unsignedToken}.${signature}`; pm.environment.set("jwt_assertion", signedJwt);
- 把请求Body里的assertion参数值替换为
{{jwt_assertion}},之后每次点击发送,Postman会自动生成最新的合法JWT,不需要手动改时间戳、复制签名。
方案2:零代码JWT生成工具(不用写脚本)
如果不想碰脚本,可以用DocuSign官方开发者后台提供的JWT调试工具,第一次填入你的私钥、集成密钥、用户ID、权限范围后,工具会自动更新时间戳、完成RS256签名,点一次按钮就能生成可用的assertion值,比jwt.io少了手动改iat/exp的步骤。所有签名运算都在本地浏览器完成,私钥不会上传到服务器,符合安全要求。
方案3:长期自动续期(无需人工触发)
如果需要长期稳定获取access_token,不需要每次手动开Postman发请求,可以用拖拽式低代码自动化工具(比如Power Automate、n8n这类),这类工具都自带现成的JWT生成组件,只要填一次固定参数,设置每45分钟自动执行一次:生成新JWT、调用token接口拿到新的access_token、存到你需要调用的位置即可,全程不需要写代码。
注意避坑:
- JWT有效期不要设置超过1小时,否则会被DocuSign直接拒绝
- RSA私钥属于敏感信息,不要贴到公开的第三方在线工具里,所有签名操作尽量在本地完成
- 应用通过Go Live Review切生产环境后,记得把授权域名、集成密钥、用户ID换成生产环境对应的配置
内容的提问来源于stack exchange,提问作者LAA
相关产品推荐
相关产品推荐

