一些網站的OAuth概述

發佈於2012年12月8日 -

這兩天陸續使用了好幾個網站的API,很是不爽,所以寫一個簡單的小結在這裏,僅供參考,如有錯誤,請在回覆中指出。

注意:寫下這段文字的時間是2012年12月9日,這些內容的變化是非常快的。

OAuth版本

這是最令人頭疼的問題,不同的網站使用不同版本的OAuth,而OAuth 1.0和2.0不互相兼容。甚至即便使用OAuth 2.0的網站,也有不同的API調用方法。

在我使用的幾個網站中,TwitterFitbit飯否使用的是OAuth 1.0。而foursquare人人網新浪微博使用的是OAuth 2.0標準。(注:這些信息來自它們的文檔)

按照OAuth工作組Hourse Luke的說法,兩個版本相比,對開發者來說最大的不同是,OAuth 2.0中,access token不是長期有效的了。但實際上,通過查閱foursquare人人網新浪微博的文檔,它們的對token的描述各有不同:

  • foursquare說,它的access token是不會過期的
  • 新浪微博說,對於普通應用,access token的有效期是7天,過期之後用戶必須 重新授權
  • 人人網說,它的access token會在一定時間內過期,但是可以用refresh token來換新的access token,而refresh token是長期有效的

這簡直是蛋疼的要死。

解決方案

對我來說,寫這個程序的目的是把fitbit和foursquare的信息同步到國內的網站上,它們本身支持同步信息到Twitter和facebook。所以我起初的思路是想辦法把信息從Twiiter同步到飯否等網站上,於是我找到了月光博客的這篇文章,作者寫了一個以Twitter爲中心的同步工具。遺憾的是,這個工具是將近三年前的了,由於各網站的更新,代碼已經完全無法使用了。

所以只能設法自己寫一個了。

對於我的需求,其實是不需要寫一個多麼複雜的應用的。因爲只是寫給自己用的。遺憾的是,在這麼多網站中,只有Twitter考慮到了用戶的這種需求,Twitter提供了「Single-user OAuth」,這樣無需使用任何工具,即可得到供自己使用的access token和access secret。

對於其他網站,則必須自己來生成了。在此,推薦使用python-oauth2這個項目。項目的README中有一個OAuth的示例。使用這個程序即可非常方便的獲得OAuth 1.0網站(fitbit和飯否)的access token。而且文檔中同樣給出了非常簡潔的使用示例,可以直接拿來使用。

對於OAuth 2.0則沒有這麼方便了。剛纔說過,不同網站的策略不一樣。這裏簡單描述一下:

foursquare

可以通過foursquare-app-framework迅速得到一個應用框架,我們需要做的就是根據文檔去修改參數,然後填充自己的代碼即可。

人人網

人人網則要相對麻煩一些。

要解決的第一個問題是,如何得到access token和refresh token。我的做法是,從它的開發手冊中下載一個php-connect程序,然後部署到一個php服務器上,得到refresh token和access token。

然後,我們可以在人人網的開發指南中找到Python SDK,這樣我們就可以通過access token去訪問數據了。

但是這裏有一個問題,人人的access token是會過期的,所以方便起見,在每次調用API前,可以用長期有效的refresh token先換取access token,再訪問API。

新浪微博

這貨竟然要每7天授權一次,還是不用比較好。

小結

前文提到的Hourse Luke這個人在2012年7月辭掉了OAuth 2.0的首席作和和校訂者,從標準中刪掉了自己的名字,然後離開了工作組。

他說:如果你現在用1.0用得很成功,就忽略掉2.0吧。