[英]Token request on Exact Online not returning access token
我一直在嘗試使用OAuth 2.0連接到Exact Online。 我們傾向於關注Java應用程序,遺憾的是Exact沒有Java的文檔/示例/支持。
我能夠執行身份驗證請求但是對於令牌請求我遇到了一些麻煩。 我的代碼:
OAuthAuthzResponse oar = OAuthAuthzResponse.oauthCodeAuthzResponse(request);
code = oar.getCode();
OAuthClientRequest oAuthRequest;
try {
oAuthRequest = OAuthClientRequest
.tokenLocation("https://start.exactonline.be/api/oauth2/token")
.setGrantType(GrantType.AUTHORIZATION_CODE)
.setClientId(CLIENT_ID)
.setClientSecret(CLIENT_SECRET)
.setRedirectURI(REDIRECT_URI)
.setCode(code)
.buildQueryMessage();
OAuthClient client = new OAuthClient(new URLConnectionClient());
OAuthJSONAccessTokenResponse oauthResponse = client.accessToken(oAuthRequest, OAuth.HttpMethod.POST);
}
我環顧四周,但我找到的所有答案都沒有解決問題。
我總是得到其中一個ProblemExceptions:
Token request failed: unsupported_response_type, Invalid response! Response body is not application/json encoded
Token request failed: invalid_request, Missing parameters: access_token
我希望任何人都有先前的精確在線處理經驗,任何幫助表示贊賞。
不確定Java庫是如何工作的,我只在C#上使用過Exact Online。
問題似乎是庫試圖從JSON響應中提取access_token
,但響應中沒有JSON。 您可能還沒有授權您的應用程序(用戶操作),或者您使用了錯誤的返回URL值(Exact檢查它是服務器端)。 如果可能的話,您可能希望查看實際輸出(我猜HTML)。 真正的例外應該在那里。
解決方案是使用舊版本的Oltu庫。 使用0.31工作,但1.0.1不工作。 奇怪的行為,但也許這將有助於未來的人。
.tokenLocation("https://start.exactonline.be/api/oauth2/token")
.setGrantType(GrantType.AUTHORIZATION_CODE)
.setClientId(CLIENT_ID)
.setClientSecret(CLIENT_SECRET)
.setRedirectURI(REDIRECT_URI)
.setCode(code)
.buildBodyMessage();
將.buildQueryMessage()
更改為.buildBodyMessage()
,它對我.buildBodyMessage()
。
這是最新的依賴:
<dependency>
<groupId>org.apache.oltu.oauth2</groupId>
<artifactId>org.apache.oltu.oauth2.client</artifactId>
<version>1.0.2</version>
</dependency>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.