腾讯微博Android客户端开发 - OAuth1.0认证介绍
2019獨角獸企業重金招聘Python工程師標準>>>
http://wiki.open.t.qq.com/index.php/OAuth%E6%8E%88%E6%9D%83%E8%AF%B4%E6%98%8E
目錄
- 1 騰訊微博 API OAuth認證介紹
- 2 OAuth是什么?
- 3 OAuth的原理認證流程及訪問資源流程
- 3.1 請求簽名說明
- 3.2 獲取未授權的Request Token
- 3.2.1 請求參數
- 3.2.2 返回參數
- 3.2.2.1 示例:
- 3.2.3 返回結果
- 3.3 請求用戶授權Request Token
- 3.4 使用授權后的Request Token換取Access Token
- 3.5 使用包含Access Token的OAuth標準參數訪問騰訊微博
- 3.6 示例
騰訊微博 API OAuth認證介紹
騰訊微博開放平臺,是基于騰訊微博系統,為廣大開發者和用戶提供的開放數據分享與傳播平臺。
廣大開發者和用戶登錄平臺后,就可以使用平臺提供的開放API接口,創建應用從微博系統獲取信息,或將新的信息傳播到整個微博系統中,豐富多樣的API接口和應用,加上您的智慧,將創造出無窮的應用和樂趣。
騰訊微博API采用OAuth協議為第三方提供接入服務,遵循[RFC-5849]規范。有關OAuth認證的詳細說明,請閱讀官方OAuth規范。各種語言的OAuth 客戶端可以在Google-OAuth項目里找到。
騰訊微博API使用OAuth 1.0a版本。
OAuth官網地址:http://www.oauth.net/
OAuth是什么?
OAuth協議為用戶資源的授權提供了一個安全的、開放而又簡易的標準。同時,任何第三方都可以使用OAuth認證服務,任何服務提供商都可以實現 自身的OAuth認證服務,因而OAuth是開放的。業界提供了OAuth的多種實現如PHP,JavaScript,Java,Ruby等各種語言開發 包,大大節約了程序員的時間,因而OAuth是簡易的。目前互聯網很多服務如Open API,很多大頭公司如Google,Yahoo,Microsoft等都提供了OAuth認證服務,這些都足以說明OAuth標準逐漸成為開放資源授權 的標準。
在官方網站的首頁,可以看到下面這段簡介:
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認證授權具有以下特點:
OAuth的原理認證流程及訪問資源流程
騰訊微博API通過以下四個步驟來完成認證授權并訪問或修改受限資源的流程
其中1~3步使用https或http方式, 第4步使用http方式。
用戶修改密碼或進行非法行為會導致授權失效,此時需要重新進行授權
請求簽名說明
所有TOKEN請求和受保護的資源請求必須被簽名,微博開放平臺會根據簽名來判斷請求的合法性。簽名算法使用Signature Base String和密鑰(Secret)生成簽名,參數oauth_signature用于指定簽名。
說明:
Signature Base String由以下三部分組成,各項之間使用&符號分隔。
1、Http Method
請求方法,GET/POST
2、URL Encode之后的請求URL(URL要小寫)
例如:
請求URL:
經URL Encode之后的請求URL為:
https%3A%2F%2Fopen.t.qq.com%2Fcgi-bin%2Frequest_token3、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。
獲取未授權的Request Token
通過訪問以下 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
此步驟的目的是請求用戶授權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時不返回該參數) |
說明:
示例:
| oauth_token | hdk48Djdsa |
| oauth_verifier | 473f82d3 |
| openid | 2D4263AB08EE337C3F3F26106BF881DA |
| openkey | 543403C5AA99BDCB6F87DFBB14240E04 |
使用授權后的Request Token換取Access Token
用戶完成授權后,第三方應用可以通過訪問如下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的OAuth標準參數訪問騰訊微博
獲得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轉載于:https://my.oschina.net/zhongwenhao/blog/142899
總結
以上是生活随笔為你收集整理的腾讯微博Android客户端开发 - OAuth1.0认证介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 使用redis 设计一个每天
- 下一篇: vue手机端回退_从外链回退到vue应用