2012-05-31 14 views
1

在谷歌應用引擎(在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引擎的一個可悲的合流,我不太清楚。很想聽到任何和所有的建議=)

回答

1
  1. google-oauth-java-client

  2. HttpClient should work in AppEngine,如果您使用的包裝,造成UrlFetch定製的ConnectionManager。詳情爲herehere

+0

謝謝@Peter,這很完美。 –

+0

我有同樣的問題,並喜歡選項1在這裏,因爲我不明白選項2的搞笑包裝用戶正在做。但我也有點卡在我應該如何使用google-oauth-java-client簽署HTTP請求。 他們的文檔(http://code.google.com/p/google-oauth-java-client/wiki/OAuth1)指向一些OAuthSigner實現,但都不知道如何簽名HTTP請求。 – Eliot