【问题标题】:DocuSign "invalid_grant" on posting jwtTokenDocuSign 在发布 jwtToken 时出现“invalid_grant”
【发布时间】:2018-07-11 02:13:27
【问题描述】:

我正在尝试按照docusign docs 此处的步骤实现“服务集成身份验证”,直到 请求访问令牌,您发送 jwt 令牌(格式正确)之前它都做得很好

我总是收到“invalid_grant”,根据该文档,是因为某些声明无效。该错误还有其他原因吗? 所有的声明看起来都不错

C#:

//request access token
        var client3 = new RestClient("https://" + _host);
        var request3 = new RestRequest("/oauth/token", Method.POST);
        request3.AddHeader("Content-Type", "application/x-www-form-urlencoded");
        request3.AddParameter("grant_type", "urn:ietf:params:oauth:grant-type:jwt-bearer");

        var headers = new[]
        {
            new Claim("alg", "RS256"),
            new Claim("typ", "JWT"),
        }.ToList();

        var claims = new[] {
            new Claim("iss", _integrationKey), //<-- integration key
            new Claim("sub", OAuthGrant.Sub), //<-- returned from /oauth/userinfo (OK)
            new Claim("iat", ToUnixTime(DateTime.Now).ToString(), ClaimValueTypes.Integer64),
            new Claim("exp", ToUnixTime(DateTime.Now.AddHours(1)).ToString(), ClaimValueTypes.Integer64),
            new Claim("aud", _host), //<-- "account-d.docusign.com"
            new Claim("scope", "signature"),
        }.ToList();

        //build jwt from private key. token decodes just fine from https://jwt.io/
        var jwtToken = CreateToken(claims, headers, "private-key.pem", Server.MapPath("/"));
        request3.AddParameter("assertion", jwtToken);

        System.Diagnostics.Debug.WriteLine("jwtToken:" + jwtToken);

        var response = client3.Execute<OAuthToken>(request3);

        System.Diagnostics.Debug.WriteLine("response content:" + response.Content); //<-- getting "invalid_grant"

        return response.Data;

使用 https://jwt.io/ 验证了 jwt 令牌,并且解码得很好。 是 docusign 演示沙盒

提前致谢 丹尼尔

【问题讨论】:

  • 您使用的是用户同意还是管理员同意?如果管理员同意,那么您需要先在 DocuSign 中声明电子邮件域。如果用户同意,则需要通过授权码授予 URL 获得用户的同意。
  • 嗨,阿米特,是的,我正在使用用户同意,从回调中我得到 访问令牌,并用它调用 /oauth/userinfo 得到“子”。我相信我在管理控制台中遗漏了一些东西
  • request3.AddParameter() 方法在生成访问令牌时会在请求正文中添加“grant_type”和“assertion”吗?
  • 是的,先生,POST 数据在正文中传输并且是 URI 编码的。以防万一我尝试以查询字符串的形式发布也没有运气。我已经用 Fiddler 检查了这种行为
  • 它不应该在 URL 中,它应该只在正文中。您可以在 jwt.io 网站中创建断言,然后使用 Postman 生成“AccessToken”,只是为了查看 DS Admin' Integrator Key 中的所有内容是否正确配置以及您是否正确获得了用户同意。

标签: oauth jwt docusignapi


【解决方案1】:

我的假设是您使用的库正在为您生成错误的断言。您也可以检查 DS SDK - DS SDK 中的 ConfigureJwtAuthorizationFlow 方法,它将帮助您按照 DS API 的预期以正确的方式生成断言。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多