1. 程式人生 > >oauth1.0 java的實現(附程式碼)

oauth1.0 java的實現(附程式碼)

最近再做畢業設計,需要用到OAuth 1.0協議。

首先,簡單說一下什麼是OAuth 協議。

OAuth 是一個開放授權協議,允許第三方應用訪問服務提供方中註冊的終端使用者的某些資源,且不會把帳號和密碼提供給第三方。

OAuth 允許通過服務提供商授予的一個臨時令牌而不是使用者名稱密碼來獲取使用者的資源,這些資源可以是受限的,令牌的時間段也可以是受限的。

簡單的說,OAuth就是用來對第三方進行認證,允許第三方獲取使用者資源。

OAuth的授權流程

你所開發的應用需要流程如下:

  1. 嚮應用服務商(新浪、搜狐等微博,開心網,豆瓣等)請求request_token。
  2. 得到request_token後重定向使用者到服務商的授權頁面。
  3. 如果使用者選擇授權你得應用,用request_token向服務商請求換取access_token。
  4. 得到access_token等資訊訪問受限資源。

而服務商相應的響應如下:

  1. 建立request_token返回給應用。
  2. 詢問使用者是否授權此應用。如果使用者授權重定向使用者至應用頁面。
  3. 建立access_token並返回給應用。
  4. 響應受限資源請求並返回相關資訊。

通俗點的說法就是“你拿著你得身份證明(request_token)向服務商申請進入使用者家的門鑰匙(access_token),服務商詢問使用者同不同意,如果使用者同意服務商就給你進入使用者家門的鑰匙(access_token),拿到鑰匙後你就可以進到使用者家裡”。

        

下面最關鍵的來了!!!!!怎麼用java來實現它!

第一步:註冊應用。我畢業設計做的是withings的OAuth,所以我就要去它的網站上註冊應用,這樣我們就有了開發應用的權利註冊成功後就會獲得oauth_consumer_key 和 consumer_secret 兩個引數,保留好,後面要用到。如果大家要做其他平臺的OAuth,自己就要去相應的網站去申請Key。比如新浪微博去新浪開放平臺,開心網去開心網開放平臺等等。申請過程大家可以到開放平臺上看一看很簡單。

其中需要注意下面三個請求地址(這些地址任何一個提供OAuth的服務商都會提供給你,看下API文件就會找到):

requst_token_url —— 第2步中的請求地址
authorize_url —— 第2步的請求地址access_token_url —— 第4步的請求地址

第二步:獲取Request_token

首先得準備一下引數及其來源:

  • oauth_consumer_key —— 註冊應用後由應用服務商提供
  • consumer_secret —— 註冊應用後由應用服務商提供
  • oauth_callback —— 使用者授權後的返回地址,可以為空
  • oauth_nonce —— 隨機字串,須保證每次都不同
  • oauth_timestamp —— 時間戳
  • oauth_signature_method —— 簽名base string 的方法,目前支援 HMAC-SHA1
  • oauth_version —— Oauth協議版本,這裡是1.0

接下來,有了這些引數就可以組裝base string了。準備base string的目的就是為了得到 oauth_signature 這個引數,這個引數向服務商傳送請求的時候需要用到。有了base string就可以簽名生成oauth_signature這個引數,oauth_signature會在請求request_token的時候用到。

得到oauth_signature後就要開始向 requst_token_url 傳送請求了,OAuth規範定義了三種傳遞OAuth引數方式:

  1. httpheader中
  2. url中
  3. post form中

根據官方文件看是哪種。新浪Httpheader可用,網易Httpheader可用,騰訊只支援在url,搜狐由於沒有appkey所以還沒去嘗試。

請求傳送成功後就會得到的響應如下:

oauth_token=8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc&oauth_token_secret=x6qpRnlEmW9JbQn4PQVVeVG8ZLPEx6A0TOebgwcuA&oauth_callback_confirmed=true

可以看到響應裡面已經包含oauth_token和oauth_token_secret了,存貯之以備後面使用。

第三步使用者認證,請求authorize_url 

拿到了oauth_token之後就需要使用者對此oauth_token授權,也即對你的應用授權,具體做法就是傳送oauth_token到服務商並請求使用者對此oauth_token授權。

 這是使用者就被帶到了應用授權頁面,並可以選擇是否對該應用授權。如果使用者授權之後就會被帶到oauth_callback 地址,這時候我們的oauth_token已經獲得使用者的授權了。

第四步:請求access_token_url,用oauth_token換取access_token

這一步跟第一步“獲取Request_token”基本相同,也是需要準備 base string 對其簽名,然後傳送請求。可以參考第二步的實現:但是相應的引數有所不用。

下來需要向access_token_url傳送請求,請求引數包括base string 裡的除了請求方法(POST或GET)和請求地址外的所有引數及其值和簽名後生成的oauth_signature。

請求成功會服務商就會返回oauth_token和oaut_token_secret,這裡的oauth_token和oaut_token_secret就是真正訪問資源要用的access_token。

以上這麼多步驟好難辦怎麼辦,google上已經有大神寫好了一些資源,你可以拿來用!

oauth_signpost

網址:http://code.google.com/p/oauth-signpost/

裡面有個example code,如下圖。裡面有四個小專案,封裝好了。自己改下三個url,和consumer key還有consumer key secret就可以用啦。

                              

原始碼也可以下載,如下圖

                          

                                

這樣也可以看原始碼。別人有了咱們借鑑拿來用就好了,畢竟做專案時間緊啊!!!

本人親測,可以使用哦

我的程式碼:http://download.csdn.net/detail/u014163625/7166605

自己原創,轉載請註明!