DocuSign授权代码授权流程返回invalid_grant错误

时间:2016-10-05 18:33:45

标签: docusignapi

DocuSign documentation通过易于遵循的授权流程进行代码授予。我能够获得"代码"从最初的GET请求到/ oath / auth,但获取令牌会给我一个" invalid_grant"的错误。当我尝试邮递员。我已按照这些步骤操作,并使用account-d.docusign.com为主机提供了如下所示的请求:

POST /oauth/token
Content-Type: application/x-www-form-urlencoded
Authorization: Basic MjMwNTQ2YTctOWM1NS00MGFkLThmYmYtYWYyMDVkNTQ5NGFkOjMwODc1NTVlLTBhMWMtNGFhOC1iMzI2LTY4MmM3YmYyNzZlOQ==

grant_type=authorization_code&code=ey2dj3nd.AAAA39djasd3.dkn4449d21d

我团队的另外两名成员也尝试过他们的开发者帐户,并且所有人都收到了invalid_grant错误。这是否不再受支持,或者是否存在与此错误相关的常见错误,我们可能会调查这些错误?

5 个答案:

答案 0 :(得分:7)

重新检查所有值。

我也得到了相同的 invalid_grant 响应,并且最初无法弄清楚原因。事实证明,我在Content-Type标题中输入了一个拼写错误。我使用 application / x-www-form-urlencode 而不是 application / x-www-form-urlencoded

您可能不是,但如果您提交的确切授权标题已在您的问题中发布( MjMwNTQ2YTctOWM1NS00MGFkLThmYYYYYYYYMDVkNTQ5NGFkOjMwODc1NTVlLTBhMWMtNGFhOC1iMzI2LTY4MmM3YmYyNzZlOQ == ),则该消息将失败。

这是their documentation中提供的样本集成密钥和样本密钥的base64值。如果使用online base64decoder解码该字符串,则会产生230546a7-9c55-40ad-8fbf-af205d5494ad:3087555e-0a1c-4aa8-b326-682c7bf276e9。这与the documentation中的示例集成密钥和密钥相同。

通过编码 您的 集成密钥和密钥( integrationKey:secret )来检查您提交的授权标头使用此online base64encoder。这将确保问题不在于您的集成密钥和密钥的base64编码。获得该值后,请确保您的授权在您从本网站获得的价值之前使用“基本”一词。 ( 基本base64stringFromOnlineEncoder

检查您在帖子正文中提交的代码不是their documentation的示例代码。 ey2dj3nd.AAAA39djasd3.dkn4449d21d 是来自their documentation的示例代码。您可能只是在问题中使用它作为占位符,但如果您要提交任何这些值,它将返回 invalid_grant 。确保帖子的主体没有任何前导或尾随空格。

  1. 拥有正确的内容类型集 application / x-www-form-urlencoded
  2. 设置正确的授权标头基本base64EncodedIntegrationKey:秘密
  3. 使用从GET请求收到的有效代码到/ oauth / auth,没有前导或尾随空格,使用正确的正文,确保您没有使用问题中的值。
  4. 如果您仍然遇到的问题,那么您没有user application但正在执行service integration,您可以使用旧版身份验证来获取您的oAuth2令牌。

    使用 Legacy Authentication 进行服务集成的替代方法

    此方法不使用授权代码。您将集成密钥,用户名和密码以JSON格式传递到X-DocuSign-Authentication标头。

      

    演示服务器:demo.docusign.net

         

    Production Server:www.docusign.net API

         

    版本:v2

    POST https://{server}/restapi/{apiVersion}/oauth2/token
    Content-Type: application/x-www-form-urlencoded
    X-DocuSign-Authentication: {"IntegratorKey":"your_integrator_key","Password":"docusign_account_password","Username":"docusign_account_username"}
    
    grant_type=password&client_id=your_integrator_key&username=docusign_account_username&password=docusign_account_password&scope=api
    

    如果您要构建用户应用程序,要求用户输入其docusign凭据以生成令牌,则此替代方案将不适合您。

答案 1 :(得分:1)

对于任何遇到此错误的人,我想在文档中指出此注释:

  

注意:所获得的授权码仅可使用2分钟。如果在获取授权代码与尝试将其交换为访问令牌之间相隔两分钟以上,操作将失败。

我一直在遇到同样的错误,直到发现笔记并加快打字速度以适应2分钟。

希望它对其他人有帮助。

答案 2 :(得分:0)

在我的情况下,问题与为Content-Type标头设置了错误的值有关,即“ application / x-www-form-URIencoded”而不是正确的“ application / x-www-form-urlencoded”。请注意,尽管在我看来,问题不是“打字错误”,而是对DocuSign文档的过度信任。

实际上,在撰写本文时,建议将错误的Content-Type直接推荐到描述Authorization Code Grant工作流程的文档页面中,有关相关部分,请参见下图。

enter image description here

希望他们会尽快修复文档,但暂时要小心,不要像我最初那样盲目地复制并粘贴示例中的代码。

答案 3 :(得分:0)

任何人都知道这是怎么回事,我收到以下内容的BadRequest

{"error":"invalid_grant","error_description":"unauthorized_client"}
var client = new RestClient(ESIGNURL);
            var request = new RestRequest("/oauth/token");
            request.Method = Method.POST;
            request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
            request.AddHeader("Authorization", "Basic " + Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(integrationkey+ ":" + secret)));

            string body = "grant_type=authorization_code&code=" + code;
            request.Parameters.Clear();
            request.AddParameter("application/x-www-form-urlencoded", body, ParameterType.RequestBody);

            var response = client.Execute(request);

答案 4 :(得分:0)

我也收到了这个错误。我意识到我在将状态传递到 oauth 令牌端点之前在代码末尾附加了状态。

此片段来自 Docusign,解释了出现该错误的其他一些原因。

Invalid-error explanation