【问题标题】:DocuSign Authorization Code Grant access token endpoint returning bad request each timeDocuSign 授权码授予访问令牌端点每次都返回错误请求
【发布时间】:2020-09-02 17:45:34
【问题描述】:

我尝试了不同的方式来传递headercontent,但每次都获得bad request 以从docusign 获取访问令牌。

以下是在向authorization code 发出请求后调用的回调 Web API 方法:

[HttpGet]
 [AllowAnonymous]
 [Route("CallBack")]
 public string Callback()
 {
     string accessToken = "";
     try
     {
         var response = Request.Query;
         if (Request.Query != null && Request.Query.Keys != null && Request.Query.Keys.Count > 0)
         {
             var authorizationCode = Request.Query["code"];

             /*                    
                     Request => POST https://account-d.docusign.com/oauth/token
                     Content-Type: application/x-www-form-urlencoded
                     Header => Authorization: Basic BASE64_COMBINATION_OF_INTEGRATOR_AND_SECRET_KEYS
                     Data => grant_type=authorization_code&authorization_code=YOUR_AUTHORIZATION_CODE
             */

             //Body
             var keyValues = new Dictionary<string, string>();
             keyValues.Add("grant_type", "authorization_code");
             keyValues.Add("authorization_code", authorizationCode);
             var bodyContent = new FormUrlEncodedContent(keyValues);

             //Header
             //Content-Type: application/x-www-form-urlencoded
             //Authorization: Basic BASE64_COMBINATION_OF_INTEGRATOR_AND_SECRET_KEYS 
             string base64Decoded = configuration.IntegrationKey + ":" + configuration.SecretKey;
             string base64Encoded;
             byte[] data = System.Text.ASCIIEncoding.ASCII.GetBytes(base64Decoded);
             base64Encoded = System.Convert.ToBase64String(data);

             var client = new System.Net.Http.HttpClient();
             client.BaseAddress = new Uri("https://account-d.docusign.com");
             var request = new System.Net.Http.HttpRequestMessage(HttpMethod.Post, "https://account-d.docusign.com/oauth/token");
             request.Content = bodyContent;

             request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
             request.Headers.Authorization = new AuthenticationHeaderValue("Basic", base64Encoded);

             var accessTokenresponse = client.SendAsync(request).Result;

             //Set access token
             //accessToken
         }
     }
     catch (Exception ex)
     {

     }

     return accessToken;
 }

【问题讨论】:

  • 是的,但我不想配置那么多东西。只是想在收到授权码后明确获取访问令牌。
  • 我的错,keyValues.Add("authorization_code", authorizationCode) 应该是keyValues.Add("code", authorizationCode)
  • 你能用 fiddler 来追踪调用吗?错误请求表明 URL 错误或一些非常基本的信息,通过查看您的代码我看不出有什么问题

标签: c# asp.net-core-webapi docusignapi .net-core-2.1


【解决方案1】:

给你的一些想法:

  1. 最好使用 OAuth2 客户端库。这是 InfoSec 专家和 DocuSign 的强烈推荐。
  2. 如果您决定推出自己的实施:通过 Postman 或类似工具尝试 OAuth2 流程,以确保您准确了解流程的工作原理。
  3. 请记住,授权码是有时间限制的。您需要在一分钟左右的时间内将其换成访问令牌(可能更短,我没有确切的数据)。
  4. 使用 wireshark 或类似工具准确地查看您发送给 DocuSign 的内容。
  5. 重要的 InfoSec 问题:在 state 参数中发送一个 nonce 值,然后在收到 DocuSign 的第一个响应时检查它是否相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-18
    • 2022-08-16
    • 2021-05-18
    • 2019-09-26
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    相关资源
    最近更新 更多