C # DocuSignJWT SDK - invalid_grant - PullRequest
       29

C # DocuSignJWT SDK - invalid_grant

0 голосов
/ 22 октября 2019

Я получаю ошибку «invalid_grant», когда пытаюсь использовать DocuSign SDK для создания токена пользователя JWT, и я не могу понять, где я ошибаюсь ...

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, говорящее «----- END RSA PRIVATE KEY not found», если только ясделать '.Replace ("\ r \ n", "\ r \ n")' в строке с секретным ключом:

object result = pemReader.ReadObject();

Я просмотрел все найденные темы, скопировал примеркод для этого, и четыре раза проверил все мои значения. Я понятия не имею, почему это не сработает.

Редактировать: Я вставил строку подтверждения, которую код отправляет в запросе, в https://jwt.io/, и я смог проверить, что декодированные данныеправильно и подпись проверена после вставки в мой открытый и закрытый ключи. Я не уверен, почему это не сработает после проверки всего этого.

Редактировать 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"); } }

1 Ответ

1 голос
/ 23 октября 2019

В итоге мне пришлось удалить свою пару ключей RSA для моего приложения и создать новую. Новый ключ работал. Я не уверен, почему старый не сделал, но это решило это по крайней мере.

...