由于错误Unexpected PEM Type
,我无法通过DocuSign的OAuth JWT进行身份验证。我正在使用他们的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."
}
我只有一个沙箱帐户,该帐户已创建了一个集成商密钥。我的重定向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);
行上引发了异常
我还使用URL https://account-d.docusign.com/oauth/auth?response_type=code&scope=signature%20impersonation&client_id=<integrator-key>&redirect_uri=https://docusign.com
授予了对JWT的访问权限。
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";
答案 0 :(得分:1)
我遇到了相同的问题,并通过使用以下代码解决了该问题。似乎在以前的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);
答案 1 :(得分:0)
无论出于何种原因,将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);
答案 2 :(得分:0)
我使用此方法签名以最新版本收到此消息:
RequestJWTUserToken(_config.ClientId, _config.UserId, $"account-d.docusign.com", _config.Key, 1);
我从网站上复制/粘贴了 .pem 文件的内容。在 Notepad++ 中打开 .pem 并将其编码从 UTF-8 BOM 切换到仅 UTF-8 为我解决了这个错误。