【发布时间】:2022-04-20 04:51:36
【问题描述】:
我正在将我们应用程序的身份验证方法升级到 DocuSign API,从 DocuSign 传统身份验证升级到 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"} ' 在 com.docusign.esign.client.ApiClient.requestJWTUserToken(ApiClient.java:866)
我正在从 DocuSign 演示环境执行此操作,并且正在使用 docusign-esign-java jar - 版本 3.12.0。这是显着的代码sn-p:
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;
}
现在就参数而言,我正在使用“应用程序和密钥”页面中的特定应用程序的集成密钥:
就 userId 而言,我使用的是下面管理屏幕中与被视为应用程序用户的用户相关的 API 用户名:
请注意,我已关注上述特定用户的instructions found here to request for application consent。这个过程是成功的。
关于范围参数,我正在传递签名和模拟范围,如代码 sn-p 所示。
至于 rsaPrivateKey 参数,我使用的是在创建过程中复制的生成的参数:
请注意,我在该屏幕上的用户应用程序身份验证方法是授权代码授予,并且我设置了重定向 URI,如图所示。
最后一个参数是JWT断言时间,目前设置为10000秒。
现在,当我在调用失败行之前的断点处暂停时,我看到我的所有参数都按照上面解释的预期定义。
有人能解释一下我可能做错了什么吗?
非常感谢任何帮助!
【问题讨论】:
标签: java oauth-2.0 docusignapi