Docusign JWT身份验证dotnet核心问题

时间:2020-10-28 09:10:45

标签: .net-core docusignapi

我需要在JWT Grant中获得docusign中的访问令牌。在这里,我对签名部分感到困惑。 这是我的方式 首次创建令牌

 var token = new JwtBuilder()
                         .WithAlgorithm(new HMACSHA256Algorithm())
                         .WithSecret(privateKey)
                         .AddClaim("iss", clientId)
                         .AddClaim("sub", accountId)
                         .AddClaim("iat", DateTimeOffset.UtcNow.AddHours(1).ToUnixTimeSeconds())
                         .AddClaim("aud", aud)
                         .AddClaim("scope", "signature impersonation")
                         .Encode();

在这里,将docusign的PrivateKey添加为Secret。

这是邮递员的请求

url: https://account-d.docusign.com/oauth/token
body: {
    "grant_type":"urn:ietf:params:oauth:grant-type:jwt-bearer",
    "assertion":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiI4YzNkMDM0My01ZGQzLTQ3YjQtOWFkZi1iNjYxNTc4NjRmOWYiLCJzdWIiOiIwOWRjMWE4OC03Zjk1LTQ3Y2YtYTJkOC00NzQxYTc0N2E2NzUiLCJpYXQiOjE2MDM4Nzg3OTIsImF1ZCI6ImFjY291bnQtZC5kb2N1c2lnbi5jb20iLCJzY29wZSI6InNpZ25hdHVyZSBpbXBlcnNvbmF0aW9uIn0.QmbBst9_QOW9vZlI1CnVaUmv3AlNeWItRnPNiCE7vZ4"
}
method: post

返回错误请求。这是错误消息

{
    "error": "invalid_grant",
    "error_description": "no_valid_keys_or_signatures"
}

如何解决此问题,请帮助我

2 个答案:

答案 0 :(得分:1)

我已经解决了这个问题 JWT令牌签名的发行方式不是有效的算法,我不得不添加docusign应用程序私钥进行添加。 我将私钥存储在一个名为private.key的文件中 这是代码

 var privateKeyfilePath = Path.Combine(Directory.GetCurrentDirectory(), "SignDocuments", "private.key");
            string privateKey = System.IO.File.ReadAllText(privateKeyfilePath);
            var rsaPrivate = RSA.Create();
            rsaPrivate.ImportRSAPrivateKey(Convert.FromBase64String(privateKey), out _);
            var privateKeyRSA = new RsaSecurityKey(rsaPrivate);
            SigningCredentials signingCredentials = new SigningCredentials(privateKeyRSA, SecurityAlgorithms.RsaSha256);

            var claims = new Claim[]
           {
                new Claim("iss", clientId),
                new Claim("sub", APIUsername),
                new Claim("iat", DateTimeOffset.UtcNow.AddHours(1).ToUnixTimeSeconds()+ ""),
                new Claim("aud", aud),
                new Claim("scope", "signature impersonation"),
           };

            var jwt = new JwtSecurityToken(
                signingCredentials: signingCredentials,
                claims: claims,
                notBefore: DateTime.UtcNow,
                expires: DateTime.UtcNow.AddHours(1),
                issuer: clientId
                );

此后,我们必须征得内部申请的同意。 为此,请使用此url。用您的一个替换clientId

请记住在docusign中创建的应用程序内添加相同的重定向URL。 和url范围必须是scope = signature%20impersonation(需要签名和模拟)

在那之后,要求接受它。

您可以在Connected Apps下的docusign管理配置文件中检查您的应用是否已获得同意

最后您可以获得访问令牌

答案 1 :(得分:0)

我强烈建议您考虑使用我们的QuickStart,它将为您设置所有内容并使用C#SDK。它已经是.NET Core。 运行它之后,这是第一个Auth Code Grant。 要更改为JWT,您可以将配置文件中的quickstart =“ true”更改为“ false”,也可以注销并使用JWT重新登录。