我正在将应用程序的身份验证方法升级到DocuSign API,从DocuSign遗留身份验证升级到JWT 2.0身份验证。
在调用Java时,我收到了以下错误:
由:"error_description":"no_valid_keys_or_signatures"}‘:com.docusign.esign.client.ApiException: Error引起,请求服务器时,接收到一个不成功的HTTP代码400,响应体为’{“错误:”invalid_grant“,com.docusign.esign.client.ApiClient.requestJWTUserToken(ApiClient.java:866)处的com.docusign.esign.client.ApiException
我在DocuSign演示环境中执行此操作,并使用Version3.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;
}现在,就参数而言,我从Apps和Keys页面为我的特定应用程序使用了Integration:

就userId而言,我正在使用与被视为应用程序用户的用户相关的Admin屏幕上的API用户名:

请注意,我已经跟踪了上面这个特定用户的在此发现申请同意书的指示。这一进程取得了成功。
关于作用域参数,我传递签名和模拟作用域,如代码片段所示。
至于rsaPrivateKey参数,我使用的是在创建过程中在以下页面复制的生成的参数:

注意,该屏幕上的用户应用程序身份验证方法是授权代码授予,我设置了重定向URI,如下所示。
最后,最后一个参数是JWT断言时间,当前设置为10000秒。
现在,当我在失败行被调用之前在断点暂停时,我看到我的所有参数都是按照上面的解释定义的。
有人能说明我可能做错了什么吗?
任何帮助都是非常感谢的!
发布于 2021-06-16 20:59:33
在与同事进行了更多的讨论并检查了Quickstart应用程序之后,这个问题相当微不足道。如果您查看我上面的代码片段,您将看到以下内容:
final ApiClient apiClient = new ApiClient();如前所述,我在演示环境中尝试这样做。显然,默认构造函数用Prod basePath填充ApiClient对象中的ApiClient --ApiClient是用错误的basePath属性设置的。如果我将上面的行更改为使用中的ApiClient实例化(从java属性中提取),那么一切都很好:
final ApiClient apiClient = new ApiClient(this.docusignProperties.getRestApiUrl());往前走!
发布于 2021-08-09 09:38:00
在我的例子中,我已经从网站jwt.io生成了JWT令牌,但是我一直都有错误no_valid_keys_or_signatures,经过多次测试,我发现了错误:
对于"exp",我把一个时代(https://www.epochconverter.com/)值定得太远了(2050年)。
{
"iss":"ea670856-xxxx-xxxx-xxxx-80560d323639",
"sub":"917c9fc5-xxxx-xxxx-xxxx-87e7ede3b8ac",
"aud":"account-d.docusign.com",
"iat": 1628496664,
"exp": 1912493464,
"scope":"signature impersonation"
}在postman中,我使用以下参数:
grant_typeurn:ietf:params:oauth:grant-type:jwt-bearer添加值grant_typeassertion

发布于 2022-04-19 20:51:36
在我尝试使用从演示到生产的集成之后,我得到了DocuSign的401错误(对我来说状态不是400 )。我错过了将"aud“值更新到生产url。很容易错过这样的小事。
https://stackoverflow.com/questions/68008670
复制相似问题