【发布时间】: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