首页 > 解决方案 > Java 应用程序的 Docusign OAuth getAccessToken 失败

问题描述

我有一个 Java 应用程序,它一直很好地被Docusigning,直到上周某个时候(可能在过去几周的任何时候)中断。

我这边没有任何变化,所以我怀疑 Docusign 方面有一些变化。

症状非常令人费解,具体如下:

在尝试获取访问令牌时,使用 OAuth 登录可以正常工作,此时它会挂起直到超时。初始阶段(登录,使用生成的 oauth 代码调用回调,然后调用 getAccesCode 组件)工作正常,这就是关键 - 如果我将挂起的 getAccessToken 调用中的确切值插入 curl 并从同一服务器执行它,它工作正常。

以下是挂断电话的详细信息:

 getAccessToken request location='https://account-d.docusign.com/oauth/token'
getAccessToken request body=grant_type=authorization_code&code=<many characters>'
getAccessToken Request header  : Authorization:Basic Y2E1ZWM3N2UtMGQ4 + MORE

因此,这绝对与 Java 库有关,但是无法在 Docusing 服务器上获得 OAuth 部分的调试跟踪(尽管我知道您可以通过启用 Docusign 日志来跟踪实际的 API 调用,但它不会出现跟踪 oauth 步骤)

令人费解的是,它运行了好几个月。现在可以很好地使用 curl,但只是挂在 Java 中。我怀疑 SSL,但如果是这种情况,为什么最初的步骤有效?

这是 Java stacktrace ,有趣的是并不总是被转储(但挂起总是发生)

 java.net.SocketException: Connection timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:152)
    at java.net.SocketInputStream.read(SocketInputStream.java:122)
    at sun.security.ssl.InputRecord.readFully(InputRecord.java:442)
    at sun.security.ssl.InputRecord.read(InputRecord.java:480)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)
    at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:884)
    at sun.security.ssl.AppInputStream.read(AppInputStream.java:102)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687)
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633)
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:658)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1323)
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:338)
    at org.apache.oltu.oauth2.client.URLConnectionClient.execute(URLConnectionClient.java:98)

如前所述,使用参数grant_type=authorization_code 对https://account-d.docusign.com/oauth/token运行curl并使用适当的auth 标头生成code=blah 工作正常,返回正确的json 响应。

有什么想法吗?我如何追踪 Docusign 方面以找出它挂起的原因?最近发生了什么变化?新的 SSL 证书?我难住了。

标签: javadocusignapi

解决方案


根据AmitDS 支持,DocuSign 已于 2018 年 5 月 29 日结束对 TLS1.0 的支持,并将很快结束对 PROD 的支持。如果您使用的是 TLS1.0,请在您的终端测试连接,如果是,则您需要将其升级TLS1.1+以再次开始使用 DS API。我假设如果您没有进行任何代码更改,那么这就是您在应用程序中看到的问题。


推荐阅读