1

我正在尝试在 DocuSign Java SDK 中使用 Authentication::login() API 调用并收到错误消息。这是一些代码:

@Component
public class TestClass {

    private ApiClient apiClient;

    public void authenticate() {

        this.apiClient = new ApiClient("account-d.docusign.com", "docusignAccessCode",
                "mySecretIntegratorKey", "myClientSecret");

        final AuthenticationApi authenticationApi = new AuthenticationApi(this.apiClient);

        try {
            // ERROR ON THE LINE BELOW
            final LoginInformation loginInformation = authenticationApi.login();
        } catch (final ApiException e) {
            // do something appropriate
        }
    }
}

mySecretIntegratorKeymyClientSecret值显然不是我发送的真实值,但其他值是。

这是我在进行 login() 调用时收到的错误:

Caused by: org.apache.oltu.oauth2.common.exception.OAuthSystemException: Missing grant_type/code
at com.docusign.esign.client.auth.OAuth$OAuthJerseyClient.execute(OAuth.java:184)
at org.apache.oltu.oauth2.client.OAuthClient.accessToken(OAuthClient.java:65)
at org.apache.oltu.oauth2.client.OAuthClient.accessToken(OAuthClient.java:55)
at org.apache.oltu.oauth2.client.OAuthClient.accessToken(OAuthClient.java:71)
at com.docusign.esign.client.auth.OAuth.updateAccessToken(OAuth.java:92)
... 123 common frames omitted

我意识到这是使用较旧的旧式身份验证,但是我有一个限制,直到今年的第一年才允许我升级到较新的身份验证方法。所以现在我需要使用 SDK 版本 2.2.1 使用这种遗留方法。

有什么想法我在这里做错了吗?我敢肯定这很简单......

感谢您的时间。

4

2 回答 2

1

您想使用旧版身份验证吗?

在这种情况下,您需要对代码进行多次更新。

  • 只打电话new ApiClient(base_url)
  • 设置 X-DocuSign-Authentication 标头--

来自旧的自述文件:

String authHeader = "{\"Username\":\"" +  username +
   "\",\"Password\":\"" +  password + 
   "\",\"IntegratorKey\":\"" +  integratorKey + "\"}";
apiClient.addDefaultHeader("X-DocuSign-Authentication", authHeader);
  • 然后使用authenticationApi.login查找用户的帐户 ID 和匹配的基本 URL。

authenticationApi.login实际上并没有让您登录。(!)

相反,该方法只是为您提供有关当前用户的信息。

API 没有登录,因为它不使用会话。相反,每次API 调用都会传递凭据。凭证可以是访问令牌(首选),或通过传统身份验证、名称/密码/集成密钥三元组。

使用传统身份验证时,不使用客户端密码。

更多信息:请参阅自述文件部分以在此旧版本的存储库中使用用户名/密码。

于 2018-10-04T06:00:16.493 回答
0

以防万一有人正在寻找可以工作的完整遗留代码!下面的 C# 代码片段有效。这是生产就绪代码。我已经对其进行了测试,并且可以正常工作。您必须单独创建一个 EnvelopeDefinition,因为不包含此代码。但是,下面的部分将对用户进行身份验证,并将成功发送信封并取回信封 ID:

string username = "john.bunce@mail.com"; 
string password = "your_password"; 
string integratorKey = "your_integration_key"; 

ApiClient apiClient = new ApiClient("https://www.docusign.net/restapi");

string authHeader = "{\"Username\":\"" + username + "\", \"Password\":\"" + password + "\", \"IntegratorKey\":\"" + integratorKey + "\"}";

apiClient.Configuration.AddDefaultHeader("X-DocuSign-Authentication", authHeader);
AuthenticationApi authApi = new AuthenticationApi(apiClient.Configuration);

LoginInformation loginInfo = authApi.Login();

string accountId = loginInfo.LoginAccounts[0].AccountId;
string baseURL = loginInfo.LoginAccounts[0].BaseUrl;
string[] baseUrlArray= Regex.Split(baseURL, "/v2");   

ApiClient apiClient2 = new ApiClient(baseUrlArray[0]); 
string authHeader2 = "{\"Username\":\"" + username + "\", \"Password\":\"" + password + "\", \"IntegratorKey\":\"" + integratorKey + "\"}";

apiClient2.Configuration.AddDefaultHeader("X-DocuSign-Authentication", authHeader2);        

EnvelopesApi envelopesApi = new EnvelopesApi(apiClient2.Configuration);

EnvelopeSummary results = envelopesApi.CreateEnvelope(accountId, envelopeDefinition);
string envelopeID = results.EnvelopeId;
于 2019-08-27T17:14:28.593 回答