最早的簡單登錄
圖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在前端暴露, 加強了安全性
待續。。。明天寫