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

不使用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账号对应的用户ID
    • docusign_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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:15:43