C# DocuSignJWT SDK - invalid_grant

C# DocuSignJWT SDK - invalid_grant

当我尝试使用 DocuSign sdk 生成 JWT 用户令牌时,我一直收到 "invalid_grant" 错误,我无法弄清楚我哪里出错了...

public OAuthToken GetJwtToken(string userId)
    {
        try
        {
            var client = new ApiClient();

            var authToken = client.RequestJWTUserToken
            (
                IntegrationKey,
                userId,
                BaseUrl,
                Encoding.UTF8.GetBytes(PrivateKey),
                1,
                new List<string> { "signature", "impersonation" }
            );

            return authToken;
        }
        catch (ApiException e)
        {
            var msg = e.Message;
        }

        return null;
    }

值:

<add key="IntegrationKey" value="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" />
<add key="PrivateKey" value="-----BEGIN RSA PRIVATE KEY-----\r\n\xxxxxxxxxxxx\r\n-----END RSA PRIVATE KEY-----" />
<add key="BaseUrl" value="account-d.docusign.com" />

我觉得它与私钥的进入方式有关。我将它存储在网络配置中,每个新行都使用 \r\n,但是如果我尝试只阅读它来自配置文件并将其传入,CreateRSAKeyFromPem() 方法中的这一行抛出一个 System.IO.IOException 说“-----未找到结束 RSA 私钥”,除非我执行 '.Replace('[=私钥字符串上的 32=]", "\r\n"):

object result = pemReader.ReadObject();

我查看了我能找到的每个线程,为此复制了示例代码,并四重检查了我的所有值。我不知道为什么这行不通。

编辑:我将代码在请求中发送的断言字符串粘贴到 https://jwt.io/ 中,并且我能够验证解码数据是否正确并且在粘贴到我的 [=37 中后验证了签名=] 和私钥。在检查了所有这些之后,我不确定为什么这不起作用。

编辑 2:这就是我存储 RSA 私钥的方式:

<add key="DocuSign:PrivateKey" value="-----BEGIN RSA PRIVATE KEY-----\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\nxxxxxxx\r\n-----END RSA PRIVATE KEY-----" />

我正在像这样检索它(System.IO 如果我尝试在没有替换的情况下获取值,则会抛出此错误:“-----END RSA PRIVATE KEY not found”)

public static string PrivateKey { get { return ConfigurationManager.AppSettings["DocuSign:PrivateKey"].Replace("\r\n", "\r\n"); } }

我最终不得不为我的应用程序删除我的 RSA 密钥对并生成一个新密钥对。新钥匙奏效了。我不确定为什么旧的没有,但这至少解决了它。