搞懂oauth2.0授權碼模式

最早的簡單登錄

圖1

去訪問一個網站,如果登錄的話,需要註冊,填一堆信息,用戶名密碼啥的,通常密碼是前端加鹽、哈希(md5,sha1等)然後再發給後端,後端存儲起來,不能直接存儲明文。然後再跳轉到登錄頁面,輸入用戶名和密碼,後端驗證用戶名和密碼,如果成功了返回一個session id,然後前端就可以結合cookie使用。

問題:

1.安全性,需要對密碼的加密有一個萬全的應對之策

2.維護麻煩,用戶用起來也麻煩

比較早的授權登錄

後來yelp試圖解決這些問題,如下圖所示

圖2

想用什麼登錄就選中,但是得需要對應的用戶和密碼,然後yelp會用密碼去google拉取你的相關信息。

問題:

1.安全性,雖然yelp承諾了不保存用戶google的密碼,但是可能是小公司,沒有信用累積(誰知道揹着用戶有沒有在後臺做什麼)

OAuth2.0授權登錄

爲了解決這些問題,oauth2.0授權登錄出現了

上個流程換用oauth2.0的流程就變成下面的了

圖3

小公司不值得信任,但是我信任google,所以yelp與google建立聯繫

用戶點擊使用google登錄,然後跳轉到google的登錄頁面,輸入自己google的賬號和密碼,然後彈出一個框,是否同意yelp訪問你的個人信息和通訊錄信息

如果你點否,那麼yelp將會什麼都不做,可能也無法登錄

如果點擊是,會回調到yelp的某個頁面,然後yelp的後臺會去訪問google你的信息和頁面,通過某種介質

圖4

 

這個流程總結爲我授權yelp去google可以拿到我的個人信息和通訊錄

oauth2.0的一些名詞的解析

Resource owner: 資源的擁有者, 即想使用google登錄yelp的用戶

Client: 客戶端 即yelp app 

Authorization server:授權服務,即上述流程中的account.google.com,在這裏你登錄了google,並且同意了授權

Resource server:資源服務,即上述流程中的contacts.google.com,存儲你相關信息的服務

Authorization grant(這個好像是scops):同時賦予某種權限,圖中賦予了個人信息和通訊錄的權限

Redirect URI: 回調URL,即上述流程中,授權成功後,跳轉回的那個callback url

Access Token : 去訪問Resource server的令牌,即上述流程中yelp後臺通過這個可以去google訪問,獲取到你同意的那些信息(個人信息,通訊錄)

oauth2.0的授權碼流程

圖5

用戶使用google授權登錄,yelp跳轉到google的Authorization server, 通過下圖的uri, 指定回調url,response type:code授權碼方式,以及想要獲取哪些授權,這裏是profile 和 contacts。

然後如果沒有登錄,用戶登錄,成功後,跳轉詢問用戶是否同意上述授權

如果同意了,又調回到我們指定的回調url,並且帶着授權碼,如下圖

圖6

第一個uri是用戶點否後,回調的uri 

第二個uri是用戶點擊是後,回調的uri

拿到這個uri後, client 即會訪問,請求到yelp的後端進行應該的操作

假設用戶同意授權,即yelp後端會用授權碼 去換取token, 通過token在yelp後端再拿到用戶的信息 

多了授權碼這一步,就是爲了避免access_token在前端暴露,  加強了安全性

 

待續。。。明天寫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章