首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"no_valid_keys_or_signatures“错误通过JavaSDKforJava2.0身份验证调用DocuSign API

"no_valid_keys_or_signatures“错误通过JavaSDKforJava2.0身份验证调用DocuSign API
EN

Stack Overflow用户
提问于 2021-06-16 19:06:21
回答 3查看 2.6K关注 0票数 2

我正在将应用程序的身份验证方法升级到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。下面是显著的代码片段:

代码语言:javascript
复制
    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秒。

现在,当我在失败行被调用之前在断点暂停时,我看到我的所有参数都是按照上面的解释定义的。

有人能说明我可能做错了什么吗?

任何帮助都是非常感谢的!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-06-16 20:59:33

在与同事进行了更多的讨论并检查了Quickstart应用程序之后,这个问题相当微不足道。如果您查看我上面的代码片段,您将看到以下内容:

代码语言:javascript
复制
final ApiClient apiClient = new ApiClient();

如前所述,我在演示环境中尝试这样做。显然,默认构造函数用Prod basePath填充ApiClient对象中的ApiClient --ApiClient是用错误的basePath属性设置的。如果我将上面的行更改为使用中的ApiClient实例化(从java属性中提取),那么一切都很好:

代码语言:javascript
复制
final ApiClient apiClient = new ApiClient(this.docusignProperties.getRestApiUrl());

往前走!

票数 0
EN

Stack Overflow用户

发布于 2021-08-09 09:38:00

在我的例子中,我已经从网站jwt.io生成了JWT令牌,但是我一直都有错误no_valid_keys_or_signatures,经过多次测试,我发现了错误:

对于"exp",我把一个时代(https://www.epochconverter.com/)值定得太远了(2050年)。

代码语言:javascript
复制
{
"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中,我使用以下参数:

  1. 选择“Post”
  2. 放置API值:https://account-d.docusign.com/oauth/token
  3. 单击“Body”部分
  4. 添加键grant_type
  5. 为键urn:ietf:params:oauth:grant-type:jwt-bearer添加值grant_type
  6. 添加键assertion
  7. 在前面的步骤中从站点jwt添加生成值

票数 0
EN

Stack Overflow用户

发布于 2022-04-19 20:51:36

在我尝试使用从演示到生产的集成之后,我得到了DocuSign的401错误(对我来说状态不是400 )。我错过了将"aud“值更新到生产url。很容易错过这样的小事。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68008670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档