Я получаю ошибку «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"); } }