如何在DocuSign中获取refresh token并兑换新的access_token
问题根因
你当前使用的是OAuth 2.0的隐式授权流(Implicit Grant),该授权流本身设计为仅返回短期有效的access_token,不会返回refresh_token;同时response_type=refresh_token属于无效参数,自然无法获取到目标值。
正确获取refresh_token的方法
需要改用*授权码流(Authorization Code Grant)*完成身份验证,步骤如下:
- 第一步:修改授权请求的
response_type参数为code,其余参数保持原有配置即可,前端跳转代码示例:
let url = "https://account-d.docusign.com/oauth/auth?response_type=code&scope=signature extended&client_id=39b5f6fb-97ca-XXXXXXXXXXXXX&state=a39fh23hnf23XXXXX&redirect_uri=http://localhost:4200/callbackdocusign"; window.open(url, '_self');
- 第二步:用户完成身份验证后,回调地址会返回授权码参数
code,而非直接返回access_token - 第三步:在服务端发起请求(禁止在前端执行,避免泄露应用密钥client_secret),调用token接口换取令牌:
请求地址:POST https://account-d.docusign.com/oauth/token
请求头:Authorization: Basic 【client_id和client_secret用英文冒号拼接后,进行Base64编码得到的字符串】Content-Type: application/x-www-form-urlencoded
请求体:grant_type=authorization_code&code=【回调返回的授权码】&redirect_uri=http://localhost:4200/callbackdocusign
请求成功后会同时返回access_token、expires_in、refresh_token三个核心参数,保存refresh_token供后续续期使用即可。
用refresh_token兑换新access_token的方法
access_token过期后,仍调用上述token接口,修改请求体参数即可完成续期:
- 请求地址:
POST https://account-d.docusign.com/oauth/token - 请求头和授权码换令牌的请求头配置完全一致
- 请求体:
grant_type=refresh_token&refresh_token=【之前保存的refresh_token】 - 请求成功后会返回新的access_token、新的过期时长,同时返回新的refresh_token,替换旧的refresh_token存储即可。
内容的提问来源于stack exchange,提问作者Shyam Vashista
相关产品推荐
相关产品推荐

