Docusignapi Docusign合作伙伴\u身份验证\u失败指定的集成器密钥未找到或已禁用

Docusignapi Docusign合作伙伴\u身份验证\u失败指定的集成器密钥未找到或已禁用,docusignapi,Docusignapi,我有一个web应用程序,我正在尝试与Docusign集成。我正在使用java docusign客户端。我开始使用OAuth2,但后来发现刷新令牌过期了,根据我所读的内容,用户必须再次进行身份验证(每次都是用户交互)。通常刷新不会过期,但访问令牌会过期。我读对了吗 我希望用户进行一次身份验证,使应用程序能够使用该令牌,而无需再次请求用户访问。所以我开始研究JWT,但没有找到我需要的文档 使用JWT,我可以获得帐户的用户信息。但无法调用模板 apiClient.configureJWTAuthori

我有一个web应用程序,我正在尝试与Docusign集成。我正在使用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

Re:我开始使用OAuth2,但后来发现刷新令牌过期了,从我所读的内容来看,用户必须再次进行身份验证(每次都是用户交互)

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

我读对了吗

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

独家报道:如果你要求
扩展的
范围(除了
签名
范围之外),那么每次你的应用程序使用刷新操作时,返回的刷新令牌将在另一个30天内有效

例如:

第1天:人类通过应用程序使用授权代码授权流登录到DocuSign。范围请求是
signature%20extended
您的应用程序从DocuSign接收回的
访问令牌
有效8小时,而
刷新令牌
有效30天。您的应用程序将刷新令牌存储在非易失性存储器中

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

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

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

请根据需要保留JWT流。JWT流允许应用程序模拟用户。这是一个较高的访问级别,因此,如果有好的替代方案,则不应使用。如果用户在场,则建议使用授权码授权


您对JWT流程有什么问题:试试我们的新功能,看看是否有帮助。

您是否确保获得用户的同意?寻找可能的解决方案谢谢你的回复。是的,我正在请求用户授权应用程序。是否有办法在docusign帐户中查看授权的应用程序?我用下面的流程更新了原始帖子[更新]