xAuth認證實際上是OAuth認證的簡化版。目前xAuth只對桌面客戶端和移動客戶端開放申請。Web應用請使用OAuth。xAuth旨在增強客戶端的用戶體驗,減少頁面跳轉次數。采用xAuth認證的桌面應用和移動應用可以跳過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 [email protected]
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="------",
4.得到的返回結果示例如下:
oauth_token=160e537d530fd105669fd79a4f1dc286&oauth_token_secret=a9c46c081842bd08f55e8f0265d8fea3&user_id=160984721
將返回結果按"&"拆開,oauth_token的值即為access_token。
至此,以後每次用Access Token 去請求數據~
此文根據新浪開放平台XAuth的內容進行整理~