【问题标题】:Docusign PARTNER_AUTHENTICATION_FAILED The specified Integrator Key was not found or is disabledDocusign PARTNER_AUTHENTICATION_FAILED 指定的集成商密钥未找到或被禁用
【发布时间】:2018-08-28 06:00:10
【问题描述】:

我有一个正在尝试与 Docusign 集成的 Web 应用程序。我正在使用 java docusign 客户端。我开始使用 OAuth2,但后来发现刷新令牌已过期,并且从我正在阅读的内容中,用户必须再次进行身份验证(每次用户交互)。通常刷新不会过期,但访问令牌会过期。我读对了吗?

我希望用户进行一次身份验证,并且应用程序能够使用该令牌,而无需再次要求用户访问。所以我开始查看 JWT,但没有找到我需要的文档。

使用 JWT,我可以获得该帐户的用户信息。但无法调用模板。

apiClient.configureJWTAuthorizationFlow(folder + "509.cert", folder 
+ "509.ppk", "account-d.docusign.com", IntegratorKey, account, 3600 );

com.docusign.esign.client.auth.OAuth.UserInfo userInfo = 
apiClient.getUserInfo(apiClient.getAccessToken());
// **** This prints fine *****
System.out.println("UserInfoxxx: " + userInfo);

// **** Verified the url is demo *****  
apiClient.setBasePath(userInfo.getAccounts().get(0).getBaseUri() + 
"/restapi");
com.docusign.esign.api.TemplatesApi api = new 
com.docusign.esign.api.TemplatesApi(apiClient);

try {
    com.docusign.esign.model.EnvelopeTemplateResults resp = 
    api.listTemplates(account);
    for ( com.docusign.esign.model.EnvelopeTemplateResult template : 
resp.getEnvelopeTemplates() )
    {
            out.println("X " + template.getDescription() + " " + 
template.getName() );
            }
        } 
        catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
https://demo.docusign.net/restapi
com.docusign.esign.client.ApiException: Error while requesting server, 
received a non successful HTTP code 400 with response Body: '{
"errorCode": "PARTNER_AUTHENTICATION_FAILED",
"message": "The specified Integrator Key was not found or is disabled.  
Invalid account specified for user."}'
at com.docusign.esign.client.ApiClient.invokeAPI(ApiClient.java:929)
    at   
com.docusign.esign.api.TemplatesApi.listTemplates(TemplatesApi.java:2471)
    at 
com.docusign.esign.api.TemplatesApi.listTemplates(TemplatesApi.java:2409)

我正在使用我的集成密钥(客户端 ID) 有什么建议或建议吗?

[更新] 是的,我在这里是我的流程。

将用户发送到

https://account-d.docusign.com/oauth/auth?response_type=code&scope=signature%20impersonation&client_id=" + IntegratorKey + "&redirect_uri=" +     redirectUri + "&state=" + state;

重定向

String code = request.getParameter("code");
com.docusign.esign.client.auth.OAuth.OAuthToken oAuthToken = apiClient.generateAccessToken(IntegratorKey, ClientSecret, code);

System.out.println("OAuthToken: " + oAuthToken.getAccessToken() );

com.docusign.esign.client.auth.OAuth.UserInfo userInfo = apiClient.getUserInfo(oAuthToken.getAccessToken());

String folder = com.n.util.Settings.getInstance().getRealPath("/") + "META-INF/cert/";
apiClient.configureJWTAuthorizationFlow(folder + "509.cert", folder + "509.ppk", "account-d.docusign.com", IntegratorKey,             userInfo.getSub(), oAuthToken.getExpiresIn() );

然后我存储 userInfo.getSub() 并在其他请求中使用它。 我也试过帐号ID。

【问题讨论】:

  • 你确定得到用户的同意吗?查看here 寻找可能的解决方案
  • 感谢您的回复。是的,我要求用户授权该应用程序。有没有办法在docusign帐户中查看授权的应用程序?我用流程更新了原始帖子,如下所示[更新]

标签: docusignapi


【解决方案1】:

Re:我开始使用 OAuth2,但后来发现刷新令牌已过期,并且根据我正在阅读的内容,用户必须再次进行身份验证(每次用户交互)。

通常刷新不会过期,但访问令牌会过期。

我读对了吗?

不完全。请按原计划使用授权码授予。

这是独家新闻:如果您要求 extended 范围(除了 signature 范围),那么每次您的应用使用时,返回的刷新令牌将在 另一个 30 天内有效刷新操作。

例子:

第 1 天:人工通过您的应用使用授权代码授予流程登录 DocuSign。范围请求是 signature%20extended 您的应用从 DocuSign 收到 Access Token 有效期为 8 小时,Refresh Token 有效期为 30 天。您的应用将刷新令牌存储在非易失性存储中。

第 23 天:人类再次希望将您的应用与 DocuSign 一起使用。您的应用程序使用它存储的刷新令牌向 DocuSign 发出刷新令牌请求。 (无需人工交互。)您的应用会收到一个访问令牌,有效期为 8 小时,new Refresh Token 从现在起 30 天(直到第 53 天)。您的应用在非易失性存储中存储(替换)刷新令牌。

结果 只要您的应用至少每 30 天使用/刷新一次刷新令牌,它将永远拥有一个 DocuSign 刷新令牌可用于获取访问令牌,无需人工交互需要。

警告 由 DocuSign 客户或 DocuSign 本身发起的安全问题可能会导致刷新和/或访问令牌不再有效,因此需要用户手动对 DocuSign 进行身份验证。但这将是一个意外事件,并且还会影响通过 JWT 身份验证流程获得的访问令牌。

请在需要的情况下保留 JWT 流。 JWT 流使您的应用能够模拟用户。这是更高级别的访问权限,因此如果有好的替代方案,则不应使用。如果用户在场,则推荐使用授权代码授予。

您对 JWT 流程有疑问:试试我们的新 Java JWT example 看看它是否有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多