java - 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 证书?我难住了。
解决方案
推荐阅读
- r - 在 Shiny 中设置关联规则
- javascript - 使用 indexOf 在 iframe 中搜索内容
- react-native - 如何在 Redux Saga 中实现顺序循环
- node.js - 使用服务器时未设置 Selenium webdriver 超时
- javascript - 如果如何在 JS 类中访问它?
- vue-formulate - 复选框标签出现在复选框下方(即使没有加载样式)
- python - Heroku Django Celerey:引发意外:ValueError Server 500 错误
- c - dentry_path_raw 忽略主目录
- c# - 脚手架现有的本地 MS 访问通过 .NET 框架:System.TypeLoadException:EntityFrameworkCore.Jet 中的方法“创建”未实现
- javascript - asp.net mvc,jQuery/JavaScript - 将变量(对象)传递给操作方法