如何在ASP.NET C#应用中自动获取DocuSign eSignature API的code参数
在ASP.NET C#中自动获取DocuSign OAuth授权码(Code)的实现方案
核心思路
借助ASP.NET的路由机制作为DocuSign授权回调地址,当用户完成DocuSign端的授权操作后,平台会自动重定向到预设的回调接口,直接从请求参数中提取code,全程无需手动复制。
具体实现步骤
1. 配置DocuSign应用回调地址
在DocuSign开发者后台,将你的ASP.NET应用回调URL(例如https://localhost:5001/DocuSign/Callback)设置为授权回调地址,确保和代码中的路由完全一致。
2. 生成DocuSign授权跳转链接
在ASP.NET中构造授权URL,引导用户跳转至DocuSign的授权页面:
public IActionResult RedirectToDocuSignAuth() { var clientId = "你的DocuSign Client ID"; var redirectUri = "https://localhost:5001/DocuSign/Callback"; var scope = "signature"; // 根据业务需求调整权限范围 var authUrl = $"https://account-d.docusign.com/oauth/auth?response_type=code&client_id={clientId}&redirect_uri={Uri.EscapeDataString(redirectUri)}&scope={scope}"; return Redirect(authUrl); }
3. 实现回调接口自动获取Code
添加Action/Page Handler接收回调请求,直接从QueryString中提取code:
public async Task<IActionResult> Callback(string code, string state = null) { if (string.IsNullOrEmpty(code)) { return BadRequest("授权失败,未获取到有效code"); } // 直接用获取到的code请求access token var accessToken = await FetchDocuSignAccessToken(code); // 后续可将token存入缓存或用于API调用 return Ok("授权成功,已自动获取access token"); } private async Task<string> FetchDocuSignAccessToken(string code) { var clientId = "你的DocuSign Client ID"; var clientSecret = "你的DocuSign Client Secret"; var redirectUri = "https://localhost:5001/DocuSign/Callback"; var tokenUrl = "https://account-d.docusign.com/oauth/token"; using var httpClient = new HttpClient(); var formContent = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("grant_type", "authorization_code"), new KeyValuePair<string, string>("code", code), new KeyValuePair<string, string>("client_id", clientId), new KeyValuePair<string, string>("client_secret", clientSecret), new KeyValuePair<string, string>("redirect_uri", redirectUri) }); var response = await httpClient.PostAsync(tokenUrl, formContent); response.EnsureSuccessStatusCode(); var tokenResult = await response.Content.ReadFromJsonAsync<DocuSignTokenModel>(); return tokenResult.AccessToken; } // 定义token响应模型 public class DocuSignTokenModel { [JsonPropertyName("access_token")] public string AccessToken { get; set; } [JsonPropertyName("expires_in")] public int ExpiresIn { get; set; } // 可根据DocuSign返回的字段补充其他属性 }
4. 完整授权流程
- 用户访问ASP.NET应用中的授权入口(比如
/DocuSign/Authorize),会自动跳转到DocuSign的登录授权页面。 - 用户完成登录并授权后,DocuSign会自动重定向到回调接口,此时接口已自动拿到
code并完成token的获取。
注意事项
- 开发环境中localhost允许使用HTTP,但正式环境必须使用HTTPS,DocuSign OAuth回调要求非localhost地址必须为HTTPS。
- 建议添加
state参数防范CSRF攻击:生成授权URL时生成随机state值并存入Session,回调时验证该值是否匹配。 - 授权码
code仅能使用一次,获取token后立即失效,需重新授权生成新code。
内容的提问来源于stack exchange,提问作者Nivas Pandian
相关产品推荐
相关产品推荐

