ris*_*ide 5 java oauth-2.0 docusignapi
我正在将应用程序的身份验证方法从 DocuSign 旧版身份验证升级到 DocuSign API 到 JWT Grant OAuth 2.0 身份验证。
我在进行 Java SDK API 调用时收到以下错误:
原因:com.docusign.esign.client.ApiException:请求服务器时出错,收到不成功的 HTTP 代码 400,响应正文:'{"error":"invalid_grant","error_description":"no_valid_keys_or_signatures"}' at com .docusign.esign.client.ApiClient.requestJWTUserToken(ApiClient.java:866)
我在 DocuSign 演示环境中执行此操作,并使用 docusign-esign-java jar - 版本 3.12.0。这是重要的代码片段:
private OAuthToken getOAuthToken(final String integratorKey, final String userId, final String rsaPrivateKey) {
final ApiClient apiClient = new ApiClient();
OAuthToken oAuthToken = new OAuthToken();
final List<String> scopes = Arrays.asList(Scope_SIGNATURE, Scope_IMPERSONATION);
try {
// call failing here on apiClient.requestJWTUserToken(...)
oAuthToken = apiClient.requestJWTUserToken(integratorKey, userId, scopes, rsaPrivateKey.getBytes(), 10000);
}
catch (IllegalArgumentException | IOException e) {
this.exceptionService.handleApiException("requestJWTUserToken", new ApiException(null, e, 500, null, null));
}
catch (final ApiException e) {
this.exceptionService.handleApiException("requestJWTUserToken", e);
}
return oAuthToken;
}
Run Code Online (Sandbox Code Playgroud)
现在就参数而言,我正在使用“应用程序和密钥”页面中我的特定应用程序的集成密钥:
就 userId 而言,我使用下面管理屏幕中与被视为应用程序用户的用户相关的 API 用户名:
请注意,我已按照此处的说明请求上述特定用户的应用程序同意。这个过程是成功的。
关于范围参数,我传递了签名和模拟范围,如代码片段中所示。
至于 rsaPrivateKey 参数,我使用的是在下一页创建过程中复制的生成的参数:
请注意,该屏幕上的用户应用程序身份验证方法是授权代码授予,并且我设置了重定向 URI,如图所示。
最后,最后一个参数是 JWT 断言时间,目前设置为 10000 秒。
现在,当我在调用失败行之前的断点处暂停时,我看到所有参数都按照上述解释的预期进行了定义。
有人可以阐明我可能做错了什么吗?
任何帮助是极大的赞赏!
在与同事进行了更多讨论并检查了快速入门应用程序后,问题变得相当微不足道。如果您查看上面的代码片段,您会看到以下内容:
final ApiClient apiClient = new ApiClient();
Run Code Online (Sandbox Code Playgroud)
如前所述,我正在演示环境中尝试此操作。好吧,显然默认构造函数使用 Prod basePath 填充 ApiClient 对象中的 basePath...因此 ApiClient 设置了错误的 basePath 属性。如果我更改上面的行以使用演示环境中的basePath(从java属性中提取)实例化ApiClient,那么一切都很好:
final ApiClient apiClient = new ApiClient(this.docusignProperties.getRestApiUrl());
Run Code Online (Sandbox Code Playgroud)
向前!