Android騰訊微博之1.0 Oauth認證
(1)什麼是Oauth?
Oauth是一個開放的認證協議,讓你可以在Web或桌麵程序中使用簡單而標準的,安全的API認證。
同時,任何第三方都可以使用Oauth認證服務,任何服務提供商都可以實現自身的Oauth認證服務,因而Oauth是開放的。
業界提供了Oauth的多種實現如PHP、JavaScript,Java,Ruby等各種語言開發包,大大節約了程序員的時間,因而Oauth是簡易的。
互聯網很多服務如Open API,很多大公司如Google,Yahoo,Microsoft等都提供了Oauth認證服務,這些都足以說明Oauth標準逐漸成為開放資源授權的標準。
(2)我們為什麼要用Oauth?
網絡開放是一個不變的趨勢,那麼不可避免的會有各種網絡服務間分享內容的需要。
舉個我們身邊例子吧:比如某個公司做了一個應用,想要調用QQ郵箱的聯係人列表,現在的方法是你需要在他們應用裏輸入你的QQ號,QQ密碼才能調用,
雖然他們都自謂“不保留QQ用戶名和密碼”,但是你們相信嗎?我們信息已經暴漏給這家公司了,又有誰知道他們到底用沒用我們的信息進行一些我們所不允許的事情呢?
OAuth就是為了解決這個問題而誕生的,當我們訪問某個公司應用,再調用QQ郵箱的聯係人列表,不再提交你的用戶名,密碼到他們公司而是提交到騰訊公司的服務器。
這樣好處自己是安全,而且不會泄露你的隱私給不信任的一方。
再說一個典型案例:
如果一個用戶擁有兩項服務:一項服務是圖片在線存儲服務A,另一個是圖片在線打印服務B。如
下圖所示。由於服務A與服務B是由兩家不同的服務提供商提供的,所以用戶在這兩家服務提供商的網站上各自注冊了兩個用戶,
假設這兩個用戶名各不相同,密碼也各不相同。當用戶要使用服務B打印存儲在服務A上的圖片時,用戶該如何處理?
法一:用戶可能先將待打印的圖片從服務A上下載下來並上傳到服務B上打印,這種方式安全但處理比較繁瑣,效率低下;
法二:用戶將在服務A上注冊的用戶名與密碼提供給服務B,服務B使用用戶的帳號再去服務A處下載待打印的圖片,這種方式效率是提高了,但是安全性大大降低了,服務B
以使用用戶的用戶名與密碼去服務A上查看甚至篡改用戶的資源。
很多公司和個人都嚐試解決這類問題,包括Google、Yahoo、Microsoft,這也促使OAUTH項目組的產生。
OAuth是由Blaine Cook、Chris Messina、Larry Halff 及David Recordon共同發起的,目的在於為API訪問授權提供一個開放的標準。
(3)Oauth中角色
1.ServiceProvider(服務提供商)
ServiceProvider通常是網站,在這些網站中保存著用戶的一些受限製的資源,例如圖片共享網站,博客或者微博係統等。
這些網站通常是使用用戶名和密碼來確認用戶的身份。一方麵負責驗證用戶身份,另一方麵保存用戶信息。
在我們要開發的騰訊微博客戶端的服務提供商就是騰訊開放平台。
2.User(用戶)
持有登錄網站的用戶名、密碼,並在網站上保存了一些信息,例如照片等.用戶不希望把這些私人信息公開,但是用戶卻需要將這些信息
共享給其他網站。我們有時卻希望能夠被另一個應用程序訪問。
3.Consumer(客戶)
希望訪問用戶私人信息的應用程序,可以是web應用程序,桌麵應用程序或者手機應用程序。Consumer需要授權後才能訪問相應資源。
我們所開發的應用程序就是Consumer.我們的應用程序是希望能夠訪問用戶的私人信息的,但是我們又不能夠得到用戶的用戶名和密碼,那這個中間就有一個
授權的過程。
4.ProtectedResources
被保護的資源。
(4)Oauth驗證流程
對於Consumer來講他無法得到用戶的用戶名和密碼,那他怎麼才能得到用戶的某些私人信息呢?基本流程如下:
第一步:某個用戶想使用我們創造的應用程序。他無法得到用戶的用戶名和密碼,所以不能直接使用用戶的信息。
第二步:Consumer就會向Service Provider請求訪問用戶的資源。
第三步:Service Provider 就會向用戶詢問是否可以同意Consumer訪問用戶的資源。
第四步:如果同意,用戶就告訴Service Provider向Consumer授權訪問。
第五步:Consumer獲的授權。
第六步:Consumer就會服務該用戶。Consumer就會向Service Provider取得該用戶的一些信息,顯示給該用戶。
(5)Oauth驗證過程
第一步:首先是我們的應用程序也就是Consumer向Service Provider請求一個Token(令牌),然後Service Provider會提供我們一個請求令牌。
第二步:將用戶的頁麵定向到一個驗證頁麵,這個頁麵不是我們Consumer提供的頁麵,而是由Service Provider提供的,在我們這就是騰訊提供的驗證頁麵。
在這裏輸入你的用戶名和密碼來驗證你的身份。從這可以看出用戶提交的用戶名和密碼並沒有提交給我們編寫的Consumer,而是提交給了Service Provider即騰訊。
這樣就能保證用戶的用戶名和密碼不會泄露,不會讓第三方知道。
第三步:由Service驗證用戶輸入的用戶名和密碼是否正確,如果正確就提示登陸成功。
第四步:登陸成功之後再把這個頁麵重定向到我們自己的頁麵上。Service就會通知Consumer該用戶沒問題,同時會分配Consumer一個授權過後的令牌。
第五步:Consumer通過這個授權之後的令牌來換取一個訪問令牌,得到這個訪問令牌之後我們的驗證就結束了。
第六步:通過這個訪問令牌就可以訪問該用戶的私人信息了。
從上麵的步驟可以看出,用戶始終沒有將其用戶名與密碼等信息提供給使用者(第三方軟件),從而更安全。
最後更新:2017-04-03 12:56:43