xAuth認證實際上是OAuth認證的簡化版。目前xAuth只對案頭用戶端和移動用戶端開放申請。Web應用請使用OAuth。xAuth旨在增強用戶端的使用者體驗,減少頁面跳轉次數。採用xAuth認證的案頭應用和行動裝置 App可以跳過oauth/request_token(擷取Request
Token)以及oauth/authorize(授權Request Token)兩步,只要提供了username和password以後,即可直接通過oauth/access_token介面得到Access Token。然後通過這個Access Token擷取資料。
xAuth的缺點是將使用者名稱和密碼暴露給了第三方應用,所以xAuth協議只適用於開放平台特殊授權的應用,也就是說,只有當開放平台完全信任這個應用的時候才會給用戶端xAuth驗證的許可權。
1.構造BaseString
* x_auth_username: 使用者名稱(即使用者在新浪通行證中使用的郵箱。)
* x_auth_password: 密碼
* x_auth_mode: 識別欄位,這裡必須是"client_auth"。
* oauth_consumer_key: 建立應用時產生的APP KEY。
* oauth_signature_method: 簽名方法,建議使用“HMAC-SHA1”。
* oauth_timestamp: 時間戳記。產生Base String時的時間戳記。
* oauth_nonce: 單次值,一個隨機字串,防止重複攻擊。
* oauth_version : OAuth協議版本。填寫“1.0”。
產生BaseString 如下所示:
POST&http%3A%2F%2Fapi.t.sina.com.cn%2Foauth%2Faccess_token&oauth_consumer_key%3D1852823608%26oauth_nonce%3D-794036333%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1291944694%26oauth_version%3D1.0%26source%3D1852823608%26x_auth_mode%3Dclient_auth%26x_auth_password%3D------%26x_auth_username%3D---------%2540sina.cn
其中 :%2540sina.cn =@sina.com
2.用剛剛產生的BaseString,經過HMAC-SHA1演算法產生oauth_signature,樣本如下:
iviIHhwXWmFLliZbeDoSyQ+XC1o=
3.將以下參數封裝成HTTP要求標頭,並向oauth/access_token介面提交POST請求:
x_auth_username: 使用者名稱(即使用者在新浪通行證中使用的郵箱。)
x_auth_password: 密碼
x_auth_mode: 識別欄位,這裡必須是"client_auth"。
oauth_consumer_key: 建立應用時產生的APP KEY。
oauth_signature_method: 簽名方法,建議使用“HMAC-SHA1”。
oauth_timestamp: 時間戳記。產生Base String時的時間戳記。
oauth_nonce: 單次值,一個隨機字串,防止重複攻擊。該參數只支援ASCII碼的字串.
oauth_version : OAuth協議版本。填寫“1.0”。
oauth_signature: 簽名值,是由根據上面的幾個參數產生的 Base String經HMAC-SHA1演算法計算得出。
OAuth
oauth_consumer_key="1852823608",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1291944694",
oauth_nonce="-794036333",
oauth_version="1.0",
oauth_signature="iviIHhwXWmFLliZbeDoSyQ%2BXC1o%3D",
source="1852823608",
x_auth_mode="client_auth",
x_auth_password="------",
x_auth_username=---------@sina.cn
4.得到的返回結果樣本如下:
oauth_token=160e537d530fd105669fd79a4f1dc286&oauth_token_secret=a9c46c081842bd08f55e8f0265d8fea3&user_id=160984721
將返回結果按"&"拆開,oauth_token的值即為access_token。
至此,以後每次用Access Token 去請求資料~
此文根據新浪開放平台XAuth的內容進行整理~