Проверка подлинности DocuSign JWT: непредвиденный тип PEM - PullRequest
0 голосов
/ 06 июля 2018

Я не могу аутентифицироваться с OAuth JWT DocuSign из-за ошибки Unexpected PEM Type. Я использую их пакет Nuget 2.2.0. Если я перехожу на 2.1.10 и слегка подправляю свой код, я получаю эту ошибку

Error calling Login: {
    "errorCode": "PARTNER_AUTHENTICATION_FAILED",
    "message": "The specified Integrator Key was not found or is disabled. An Integrator key was not specified."
}

У меня есть только учетная запись Sandbox, для которой я создал ключ интегратора. URI перенаправления https://docusign.com, и я создал пару ключей RSA, в которой я сохранил закрытый ключ в файле PEM.

Я следую инструкциям здесь https://github.com/docusign/docusign-csharp-client/blob/master/README.md, но в строке возникает исключение OAuth.OAuthToken tokenInfo = apiClient.ConfigureJwtAuthorizationFlowByKey(integratorKey, userId, oauthBasePath, privateKey, expiresInHours);

Я также предоставил доступ к JWT, используя URL https://account-d.docusign.com/oauth/auth?response_type=code&scope=signature%20impersonation&client_id=<integrator-key>&redirect_uri=https://docusign.com.

string userId = "e1f43c1a-2546-4317-85a9-cea367f8f92c";
string oauthBasePath = "account-d.docusign.net";
string integratorKey = "<integrator-key>";
string privateKey = @"C:\Users\me\privateKey.pem";
int expiresInHours = 1;
string host = "https://demo.docusign.net/restapi";

Ответы [ 2 ]

0 голосов
/ 17 июля 2018

Я столкнулся с той же проблемой и решил ее, используя следующий код ниже. Похоже, что в предыдущем SDK (<= 2.1.10?) Требовалось физическое расположение файла, теперь (SDK> = 2.2.0?) Требуется содержимое файла

testConfig.PrivateKeyFilename = File.ReadAllText("./private.pem");

OAuth.OAuthToken tokenInfo = apiClient.ConfigureJwtAuthorizationFlowByKey
            (testConfig.IntegratorKey, testConfig.UserId, testConfig.OAuthBasePath, testConfig.PrivateKeyFilename, testConfig.ExpiresInHours);
0 голосов
/ 11 июля 2018

По какой-то причине вставление userId, oauthBasePath, integratorKey, privateKey, expiresInHours и host в новом классе сработало.

Мне также пришлось передать содержимое файла PEM вместо пути к файлу.

 public class FooConfig
{
    public string Host { get; set; }

    public string IntegratorKey { get; set; }

    public string UserId { get; set; }

    public string OAuthBasePath { get; set; }

    public string PrivateKeyFilename { get; set; }

    public int ExpiresInHours { get; set; }

    public ApiClient ApiClient { get; set; }

    public FooConfig()
    {
        this.UserId = "e1f43c1a-2546-4317-85a9-cea367f8f92c";
        this.OAuthBasePath = "account-d.docusign.com";
        this.IntegratorKey = "<integrator-key>";
        this.PrivateKeyFilename = @"C:\Users\me\privateKey.pem";
        this.ExpiresInHours = 1;
        this.Host = "https://demo.docusign.net/restapi";
    }
}


///////////////////////////////////////////////////////////////////////////////////////

FooConfig testConfig = new FooConfig();
testConfig.ApiClient = new ApiClient(testConfig.Host);

// If this is the first time logging in - Get Consent from the user - this is a onetime step.
Uri oauthURI = testConfig.ApiClient.GetAuthorizationUri(testConfig.IntegratorKey, scopes, "https://docusign.com", OAuth.CODE, "testState");
Process.Start(oauthURI.ToString());

string key = File.ReadAllText(testConfig.PrivateKeyFilename);
OAuth.OAuthToken tokenInfo = testConfig.ApiClient.ConfigureJwtAuthorizationFlowByKey(testConfig.IntegratorKey, testConfig.UserId, testConfig.OAuthBasePath, key, testConfig.ExpiresInHours);
...