通过应用程序引擎通过SSL建立OAuth签名POST请求

时间:2012-05-31 23:13:01

标签: java google-app-engine

使用谷歌应用引擎(在Java运行时)进入一个有趣的问题。在app引擎任务/视图中,我正在尝试联系外部Web服务API。

外部API使用OAuth进行身份验证,仅接受通过SSL的请求。我正在调用的特定方法是POST请求。

选项1:使用AppEngine URLFetch服务。但是,我没有看到OAuth签名的方法。 URL Fetch使用java.net HttpURLConnection,它会对其请求进行流式处理,从而排除签名。我的首选java OAuth库是oauth-signpost,但由于这个原因,它不支持java.net。是否有与HttpURLConnection兼容的OAuth库?

选项2:使用其他网址抓取库。我最喜欢的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 个答案:

答案 0 :(得分:1)

  1. google-oauth-java-client

  2. HttpClient should work in AppEngine,如果您使用包装UrlFetch的自定义ConnectionManager。详细信息为herehere