Docusign PARTNER_AUTHENTICATION_FAILED找不到或已禁用指定的集成商密钥

时间:2018-08-26 22:09:30

标签: docusignapi

我有一个要与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。

1 个答案:

答案 0 :(得分:0)

  

回复:我从使用OAuth2的路径开始,但是后来发现刷新令牌已过期,从我阅读的内容来看,用户将不得不再次进行身份验证(每次用户交互)。

     

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

     

我读得正确吗?

不完全。请按照您最初的计划使用授权代码授予。

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

示例:

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

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

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

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

请在需要的情况下保留JWT流程。 JWT流程使您的应用能够模拟用户。这是更高级别的访问,因此,如果有很好的选择,则不应使用。如果用户在场,则建议使用授权码授予。

解决有关JWT流程的问题:试用我们新的Java JWT example来看看是否有帮助。