腾讯微博Android客户端开发——OAuth认证介绍
騰訊微博是一個由騰訊推出,提供微型博客服務的類Twitter網站。在騰訊官方 的軟件或網站中發布微博我們需要輸入QQ號和密碼,同樣如果我們自己開發客戶端給用戶使用,我們也需要用戶提供QQ號和密碼,這就留下了安全隱患。不發分 子可以在程序中留下后門,獲取QQ號和密碼,從而進行違法操作。為了保護QQ用戶的利益,提高微博開放平臺的安全指數,騰訊微博API采用OAuth協議 為第三方提供接入服務,遵循[RFC-5849]規范。目前OAuth最新版本為OAuth2.0,騰訊微博API使用OAuth 1.0A版本。OAuth官網地址:http://www.oauth.net/
OAuth是什么
OAuth協議為用戶資源的授權提供了一個安全的、開放而又簡易的標準。與以往的 授權方式不同之處是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認證授權具有以下特點:
1. 簡單:不管是OAuth服務提供者還是應用開發者,都很容易于理解與使用;
2. 安全:沒有涉及到用戶密鑰等信息,更安全更靈活;
3. 開放:任何服務提供商都可以實現OAuth,任何軟件開發商都可以使用OAuth;
OAuth的認證流程
?
具體每步執行信息如下:
A. 第三方軟件(我們自己開發的軟件)向OAuth服務提供商請求未授權的Request Token。向Request Token URL發起請求,請求需要帶上的以下參數:
?
B. OAuth服務提供商同意使用者的請求,并向其頒發未經用戶授權的oauth_token與對應的oauth_token_secret,并返回給使用者:
?
C. 使用者向OAuth服務提供商請求用戶授權的Request Token。向User Authorization URL發起請求,請求帶上上步拿到的未授權的token與其密鑰:
?
D. OAuth服務提供商將引導用戶授權。該過程可能會提示用戶,你想將哪些受保護的資源授權給該應用。此步可能會返回授權的Request Token也可能不返回。在騰訊認證過程中此過程會定位到騰訊的授權頁面,要求用戶輸入QQ號和密碼,然后選擇同意或者拒絕對應用授權。授權成功后客戶端 應用會在網頁中給出授權碼,用戶需要手工將驗證碼輸入到應用中才能完成授權流程。返回參數:
?
E. Request Token 授權后,使用者將向Access Token URL發起請求,將上步授權的Request Token換取成Access Token。請求的參數:
?
F. OAuth服務提供商同意使用者的請求,并向其頒發Access Token與對應的密鑰,并返回給使用者。
?
G. 使用者以后就可以使用上步返回的Access Token訪問用戶授權的資源。
注:Access Token和Access Token Secret永遠不會過期,直到用戶撤銷應用授權或騰訊回收您的app訪問權限才會失效。
從上面的步驟可以看出,用戶始終沒有將其用戶名與密碼等信息提供給使用者(第三方軟件),從而更安全。
OAuth相關術語
了解認證流程后,我們順便了解下OAuth的一些術語的定義:
OAuth相關的三個URL:?
Request Token URL: 獲取未授權的Request Token服務地址;
User Authorization URL: 獲取用戶授權的Request Token服務地址;
Access Token URL: 用授權的Request Token換取Access Token的服務地址;
OAuth相關的參數定義:
oauth_consumer_key: 使用者的ID,OAuth服務的直接使用者是開發者開發出來的應用。所以該參數值的獲取一般是要去OAuth服務提供商處注冊一個應用,再獲取該應用的oauth_consumer_key。
oauth_consumer_secret:oauth_consumer_key對應的密鑰。
oauth_signature_method: 請求串的簽名方法,應用每次向OAuth三個服務地址發送請求時,必須對請求進行簽名。簽名的方法有:HMAC-SHA1、RSA-SHA1與PLAINTEXT等三種。
oauth_signature: 用上面的簽名方法對請求的簽名。
oauth_timestamp: 發起請求的時間戳,其值是距1970 00:00:00 GMT的秒數,必須是大于0的整數。本次請求的時間戳必須大于或者等于上次的時間戳。
oauth_nonce: 隨機生成的字符串,用于防止請求的重放,防止外界的非法***。
oauth_version: OAuth的版本號,可選,其值必須為1.0。
OAuth HTTP響應代碼:
HTTP 400 Bad Request 請求錯誤
Unsupported parameter 參數錯誤
Unsupported signature method 簽名方法錯誤
Missing required parameter 參數丟失
Duplicated OAuth Protocol Parameter 參數重復
HTTP 401 Unauthorized 未授權
Invalid Consumer Key 非法key
Invalid / expired Token 失效或者非法的token
Invalid signature 簽名非法
Invalid / used nonce 非法的nonce
轉載于:https://blog.51cto.com/5282981/980392
總結
以上是生活随笔為你收集整理的腾讯微博Android客户端开发——OAuth认证介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的模块加载系统 v17的入门教程2
- 下一篇: 填充因子-FILL FACTOR