### 什么是OAuth2.0?
- 假設我有一件非常重要的文件存儲與于瑞士銀行的私有保險柜中,如果我需要委托某個人將他提取出來,除了將密碼告訴他之外別無他法,
但是OAuth的目的卻是定義一種協(xié)議幫助資源的擁有者在不提供自身憑證的前提下授權第三方應用以他的名義存取受保護的資源。OAuth的全稱為“Open Authorization”,所以它是一個開放的協(xié)議,目前最新的版本為2.0。
- OAuth2.0對OAuth1.0是完全不兼容的。目前支持OAuth的網(wǎng)站有t.sina.com.cn,t.qq.com,t.sohu.com,t.163.com,www.douban.com,www.twitter.com,www.facebook.com
- 開心網(wǎng)open文檔:http://wiki.open.kaixin001.com/index.php?id=OAuth2.0%E6%96%87%E6%A1%A3
### OAuth2.0涉及角色
- 資源擁有者(RO:Resource Owner):資源的擁有者也是授權者,如果它是一個“人”,一般就是指最終用戶。由于“資源”在這個場景中表示為用戶的電子郵箱地址,所以資源擁有者自然就是指最終用戶。
- 客戶端應用(Client):需要取得資源擁有者授權并最終訪問受保護資源的應用,對于我們的場景來說,就是我們創(chuàng)建的App。
- 資源服務器(Resource Server):最終承載資源的服務器,它一般體現(xiàn)為一個可被調(diào)用的Web API。對于我們提供的場景來說,客戶端通過調(diào)用新浪微博得Web API獲得用戶的電子郵箱地址,所以新浪微博就是資源服務器。
- 授權服務器(Authorization Server):它對用戶(一般情況下為資源擁有者)和客戶端應用實施認證,并在用戶授權的情況下向客戶端應用頒發(fā)Access Token。在我們提供的場景中,資源服務器和認證服務器合二為一,均為新浪微博。
### 實現(xiàn)方案
>
這里面的access_token可以考慮放在緩存中而不是放在數(shù)據(jù)庫中,一旦過期時間到就可以作廢了
oauth2.0有許多種流程,分別適應不同的第三方應用,并且這些流程數(shù)目還在不斷增加和完善中,一個網(wǎng)站可以實現(xiàn)一種或多種流程
#### 1. Web Server Flow(適合有server的第三方使用的):web Server Flow是把oauth1.0的三個步驟縮略為兩個步驟
1. 客戶端http請求authorize
2. 服務端接收到authorize請求,返回用戶登陸框頁面
3. 用戶在客戶端登陸
4. 服務器端將瀏覽器定位到callbackurl,并同時傳遞Authorization Code
5. 客戶端使用https發(fā)送access_token
6. 服務器端收到access_token請求,驗證Authorization Code---生成access_token, refresh_token,和過期時間--access_token和refresh_token和過期時間入庫
7. 返回access_token和refresh_token,過期時間
8. 用戶使用HTTPS+ access_token請求開放平臺接口
#### 2.User-Agent(適合所有無server端配合的客戶端):
1. 客戶端http請求authorize
2. 服務端接收到authorize請求,返回用戶登陸框頁面
3. 用戶在客戶端登陸
4. 服務器端將瀏覽器定位到callbackurl,并同時傳遞access_token和過期時間