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