在谷歌應用引擎(在Java運行時)遇到一個有趣的問題。從應用程序引擎任務/視圖中,我試圖聯繫外部web服務API。通過來自應用引擎的SSL進行OAuth簽名POST請求
外部API使用OAuth進行身份驗證,並且只通過SSL接受請求。我打電話的特定方法是POST請求。
選項1:使用AppEngine URLFetch服務。但是,我沒有看到辦法進行OAuth簽名。網址提取使用java.net HttpURLConnection,它流式傳輸請求,阻止簽名。我的轉到Java OAuth庫是oauth-signpost,但由於這個原因它不支持java.net。是否有一個與HttpURLConnection兼容的OAuth庫?
選項2:使用另一個URL抓取庫。我最喜歡的HTTP庫是apache commons HTTP library。但是,這會在使用SSL時導致問題,因爲應用程序引擎沙箱禁止使用javax.ssl。我收到以下錯誤試圖通過SSL使用Apache庫:
java.lang.NoClassDefFoundError: javax.net.ssl.KeyManagerFactory is a restricted class. Please see the Google App Engine developer's guide for more details.
at javax.net.ssl.KeyManagerFactory.<clinit>(KeyManagerFactory.java)
at org.apache.http.conn.ssl.SSLSocketFactory.createSSLContext(SSLSocketFactory.java:223)
我假設,因爲你不能直接打開插座。
這是OAuth/POSTs/SSL/App引擎的一個可悲的合流,我不太清楚。很想聽到任何和所有的建議=)
謝謝@Peter,這很完美。 –
我有同樣的問題,並喜歡選項1在這裏,因爲我不明白選項2的搞笑包裝用戶正在做。但我也有點卡在我應該如何使用google-oauth-java-client簽署HTTP請求。 他們的文檔(http://code.google.com/p/google-oauth-java-client/wiki/OAuth1)指向一些OAuthSigner實現,但都不知道如何簽名HTTP請求。 – Eliot