騰訊微博開放平臺,是基於騰訊微博系統,爲廣大開發者和用戶提供的開放數據分享與傳播平臺。 php
廣大開發者和用戶登陸平臺後,就能夠使用平臺提供的開放API接口,建立應用從微博系統獲取信息,或將新的信息傳播到整個微博系統中,豐富多樣的API接口和應用,加上您的智慧,將創造出無窮的應用和樂趣。 git
騰訊微博API採用OAuth協議爲第三方提供接入服務,遵循[RFC-5849]規範。有關OAuth認證的詳細說明,請閱讀官方OAuth規範。各類語言的OAuth 客戶端能夠在Google-OAuth項目裏找到。 程序員
騰訊微博API使用OAuth 1.0a版本。 web
OAuth官網地址:http://www.oauth.net/ 算法
OAuth協議爲用戶資源的受權提供了一個安全的、開放而又簡易的標準。同時,任何第三方均可以使用OAuth認證服務,任何服務提供商均可以實現 自身的OAuth認證服務,於是OAuth是開放的。業界提供了OAuth的多種實現如PHP,JavaScript,Java,Ruby等各類語言開發 包,大大節約了程序員的時間,於是OAuth是簡易的。目前互聯網不少服務如Open API,不少大頭公司如Google,Yahoo,Microsoft等都提供了OAuth認證服務,這些都足以說明OAuth標準逐漸成爲開放資源受權 的標準。 json
在官方網站的首頁,能夠看到下面這段簡介: api
An open protocol to allow secure API authorization in a simple and standard method from desktop and web applications.
大概意思是說OAuth是一種開放的協議,爲桌面程序或者基於BS的web應用提供了一種簡單的,標準的方式去訪問須要用戶受權的API服務。OAuth相似於Flickr Auth、Google's AuthSub[1]、Yahoo's BBAuth、 Facebook Auth等。 瀏覽器
OAuth認證受權具備如下特色: 安全
騰訊微博API經過如下四個步驟來完成認證受權並訪問或修改受限資源的流程 app
其中1~3步使用https或http方式, 第4步使用http方式。
用戶修改密碼或進行非法行爲會致使受權失效,此時須要從新進行受權
全部TOKEN請求和受保護的資源請求必須被簽名,微博開放平臺會根據簽名來判斷請求的合法性。簽名算法使用Signature Base String和密鑰(Secret)生成簽名,參數oauth_signature用於指定簽名。
說明:
Signature Base String由如下三部分組成,各項之間使用&符號分隔。
一、Http Method
請求方法,GET/POST
二、URL Encode以後的請求URL(URL要小寫)
例如:
請求URL:
https://open.t.qq.com/cgi-bin/request_token
經URL Encode以後的請求URL爲:
https%3A%2F%2Fopen.t.qq.com%2Fcgi-bin%2Frequest_token
三、URL Encode並排序以後的請求參數
例如: URL請求參數爲:
oauth_callback=www.qq.com&oauth_consumer_key=49b0bes7352943a1a5609f9e30346201&oauth_nonce=90523669&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1298513816&oauth_version=1.0
經URL Encode並排序以後的請求參數格式以下(參數間使用%26(即&符號)分隔):
oauth_callback%3Dwww.qq.com%26oauth_consumer_key%5D49b0bes7352943a1a5609f9e30346201%26oauth_nonce%3D90523669%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1298513816%26oauth_version%3D1.0
算法僞碼:
httpMethod + "&" + url_encode( base_uri ) + "&" + sorted_query_params.each { | k, v | url_encode ( k ) + "%3D" + url_encode ( v ) }.join("%26")
密鑰由App Secret和Token Secret組成(中間使用&符號分隔)
簽名算法目前只支持HMAC-SHA1。
經過訪問如下 URL 獲取未受權的 Request Token
http://open.t.qq.com/cgi-bin/request_token
參數 | 意義 |
---|---|
oauth_consumer_key | App Key(應用信息中的App Key值) |
oauth_signature_method | 簽名方法,暫只支持HMAC-SHA1 |
oauth_signature | 簽名值,密鑰爲:App Secret。計算說明。 |
oauth_timestamp | 時間戳, 其值是距1970 00:00:00 GMT的秒數,必須是大於0的整數 |
oauth_nonce | 單次值,隨機生成的32位字符串,防止重放攻擊(每次請求必須不一樣) |
oauth_callback | 認證成功後瀏覽器會被重定向到這個url中 |
oauth_version | 版本號,1.0 |
參數 | 意義 |
---|---|
oauth_token | 未受權的Request Token |
oauth_token_secret | 對應的Request Token Secret |
oauth_callback_confirmed | 對oauth_callback的確認信號 |
說明:
request_token
http://open.t.qq.com/cgi-bin/request_token?oauth_callback=null&oauth_consumer_key=aca77d2eb96f46e1b3353bc6743e8bfc&oauth_nonce=yQDMuXvdcEfQs2Mzf3XcT1r36WTULJls&oauth_signature=exxzU/tTbpdicmYHcyYh5kqgYgo=&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1299569145&oauth_version=1.0
參數名 | 參數值 |
---|---|
oauth_consumer_key | aca77d2eb96f46e1b3353bc6743e8bfc |
oauth_signature_method | HMAC-SHA1 |
oauth_signature | exxzU/tTbpdicmYHcyYh5kqgYgo= |
oauth_timestamp | 1299569145 |
oauth_nonce | yQDMuXvdcEfQs2Mzf3XcT1r36WTULJls |
oauth_callback | null |
oauth_version | 1.0 |
oauth_token=hdk48Djdsa&oauth_token_secret=xyz4992k83j47x0b&oauth_callback_confirmed=true
參數名 | 參數值 |
---|---|
oauth_token | hdk48Djdsa |
oauth_token_secret | xyz4992k83j47x0b |
oauth_callback_confirmed | true |
此步驟的目的是請求用戶受權Request Token,請求URL:
http://open.t.qq.com/cgi-bin/authorize
請求參數:
參數 | 意義 |
---|---|
oauth_token | 上一步中得到的未受權的Request Token |
wap (可選參數) |
主要用於指定手機受權頁的版本 wap=1時,跳轉到wap1.0的受權頁 wap=2時,跳轉到wap2.0的受權頁 不帶本參數時,手機訪問默認跳到wap2.0的受權頁 |
返回參數:
參數 | 意義 |
---|---|
oauth_token | 用戶受權以後的Token值,與未受權Token值相同。 |
oauth_verifier | 驗證碼 |
openid | 能夠惟一標識一個用戶(wap=1或wap=2時不返回該參數) |
openkey | 與openid對應的用戶key,是驗證openid身份的驗證密鑰(wap=1或wap=2時不返回該參數) |
說明:
# web應用會重定向到oauth_callback所指定的URL(含返回參數)。 # 客戶端應用(oauth_callback=null)會在網頁中給出受權碼,用戶須要手工將驗證碼輸入到應用中才能完成受權流程。
示例:
參數 | 意義 |
---|---|
oauth_token | hdk48Djdsa |
oauth_verifier | 473f82d3 |
openid | 2D4263AB08EE337C3F3F26106BF881DA |
openkey | 543403C5AA99BDCB6F87DFBB14240E04 |
oauth_token=hdk48Djdsa&oauth_verifier=473f82d3
用戶完成受權後,第三方應用能夠經過訪問以下url,將已受權的Request Token換取Access Token。Access Token將被用於訪問或修改受限資源。
http://open.t.qq.com/cgi-bin/access_token
請求參數:
參數 | 意義 |
---|---|
oauth_consumer_key | AppKey |
oauth_token | 第一步中得到的Request Token |
oauth_signature_method | 簽名方法,暫只支持HMAC-SHA1 |
oauth_signature | 簽名值,密鑰爲:App Secret&Request Token Secret。計算說明。 |
oauth_timestamp | 時間戳, 其值是距1970 00:00:00 GMT的秒數,必須是大於0的整數 |
oauth_nonce | 單次值,隨機生成的32位字符串,防止重放攻擊(每次請求必須不一樣) |
oauth_verifier | 上一步請求受權request token時返回的驗證碼 |
oauth_version | 1.0 |
返回參數:
參數 | 意義 |
---|---|
oauth_token | Access Token |
oauth_token_secrete | Access Token Secret |
說明:
用於簽名的Signature Base String格式以下:
示例:access_token:
http://open.t.qq.com/cgi-bin/access_token?oauth_consumer_key=aca77d2eb96f46e1b3353bc6743e8bfc&oauth_nonce=y2FrX7Muouma5vxWTKngEb7uHkRu4P5u&oauth_signature=209vcEaHkmb/QwHqsRU3HRPvlqw=&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1299569210&oauth_token=6b99583b7bc8446bb57e86128158994f&oauth_verifier=877973&oauth_version=1.0
參數 | 意義 |
---|---|
oauth_consumer_key | aca77d2eb96f46e1b3353bc6743e8bfc |
oauth_token | 6b99583b7bc8446bb57e86128158994f |
oauth_signature_method | HMAC-SHA1 |
oauth_signature | 209vcEaHkmb/QwHqsRU3HRPvlqw= |
oauth_timestamp | 1299569210 |
oauth_nonce | y2FrX7Muouma5vxWTKngEb7uHkRu4P5u |
oauth_verifier | 877973 |
oauth_version | 1.0 |
返回結果:
oauth_token=nnch734d00ls2jdk&oauth_token_secreate=pdkkdhi9sl3r4s00
參數 | 意義 |
---|---|
oauth_token | nnch734d00ls2jdk |
oauth_token_secrete |
pdkkdhi9sl3r4s00 |
至此,您的應用就取得了用戶的受權,請妥善保管得到的Access Token和Access Token Secret。
此後,您的應用就能夠使用該Access Token訪問騰訊微博了。
得到Access Token以後,您的應用就能夠使用該Access Token訪問騰訊微博。
在每次調用接口API時,請求都必須包含以下所示OAuth標準參數:
參數 | 意義 |
---|---|
oauth_consumer_key | AppKey |
oauth_token | Access Token |
oauth_signature_method | 簽名方法,暫只支持HMAC-SHA1 |
oauth_signature | 簽名值,密鑰爲:App Secret&Access Token Secret。 |
oauth_timestamp | 時間戳 |
oauth_nonce | 單次值 |
調用API:
http://open.t.qq.com/api/t/add 發佈一條微博
參數包括:
參數 | 參數值 |
---|---|
content | helloworld |
format | json |
oauth_consumer_key | aca77d2eb96f46e1b3353bc6743e8bfc |
oauth_nonce | Tld5QvrtTlRJvaSWPlCC7DIXxnTBeumD |
oauth_signature | JuPSe7ibf0uPECp4HcX4Fu9y3l0= |
oauth_signature_method | HMAC-SHA1 |
oauth_timestamp | 1299569293 |
oauth_token | b8c8f1a888ea4f2887eac88787b6e895 |
oauth_version | 1.0 |
post:
http://open.t.qq.com/api/t/add?content=helloworld&clientip=121.14.96.121&longitude=113.421234&latitude=22.354231&syncflag=0&format=xml&oauth_token=d8b0965f24a14575a84863a5e19a8705&oauth_nonce=709da91378181caec8e709085a757764&oauth_consumer_key=801058005&oauth_signature_method=HMAC-SHA1&oauth_version=1.0&oauth_timestamp=1350653166&oauth_signature=unC%2FaR5N6hoXUsrabBgKHYjKcdg%3D