2016-06-07 114 views
1

我在爲Java Web應用程序使用Google日曆的URL回調時遇到問題。我成功地跟蹤了文檔,並在本地獲得了這個工作,但我現在正試圖在EC2實例上運行該工具。在Web應用程序上使用Google日曆的OAuth 2.0

關於Google的快速入門教程聲稱選擇應用類型爲'other'。這在當地適合我。

但是,當我嘗試在服務器上運行這個服務時,我會在日誌中給出URL,並且URL每次都在不同的端口上與localhost進行回調。由於該應用程序不再運行在本地主機上,回調從未收到。

經過一番閱讀後,我需要在Web服務器上實際運行該憑據時將憑據設置爲「Web應用程序」。這表明我需要定義一個'授權重定向URI',並且需要有正確的端口。

我用的是下面的基礎上,教程重定向到URL來認證用戶:

Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user"); 

After reading this SO post然後我在代碼中設置的端口,所以我可以進入該憑證的同一個端口到然後進入client_secret.json(我的應用程序目前在8080上運行)

我通過這樣做:

Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver.Builder().setPort(8080).build()).authorize("user"); 

但是,這將引發綁定異常,因爲顯然該端口已被使用。

選擇一個我知道的端口是免費的(我試過9999)確實帶我進入頁面,允許我進行身份驗證,因爲URI與client_secret.json中聲明的URI相匹配。然後,這將引發插座綁定失敗例外:

所致:java.lang.Exception的:套接字綁定失敗:[730048]只有一個 用法每個套接字地址(協議/網絡地址/端口)是 通常允許的。

很多例子我已經在網上看到沒有設置端口,然後允許AuthorizationCodeInstalledApp選擇一個自由港,但如何將這項工作時,我們需要指定的API證書授權重定向的URI?

+1

通常,當某個進程/程序使用某個端口並且另一個進程嘗試使用該端口時會出現該錯誤,從而導致衝突。由於該特定端口已被程序使用,因此其他程序無法使用該端口。所以確保你使用一個免費的端口。對於您有關OAuth的問題,您可以查看此[documentaion](https://developers.google.com/identity/protocols/OAuth2InstalledApp#choosingredirecturi)關於如何使用重定向URI。還要確保您使用的重定向URI必須與您在Google API控制檯中爲應用程序設置的重定向URI相同。 – KENdi

回答

0

我找到了解決方案。我實際上還有其他的東西在9999端口上運行,這就是爲什麼上述方法不適用於本地。 AuthorizationCodeInstalledApp構建器具有一個適用於EC2實例的setHost()方法。

Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver.Builder().setHost(REDIRECT_URI).setPort(9999).build()).authorize("user"); 
+0

我面臨類似的問題,我有一個很簡單的問題,應該setHost接收一個名稱(example.com)或IP(188.168.2.2)?有或沒有http://? – Aldeguer

相關問題