第三方登錄原理探究
底層協(xié)議
OAuth(開放授權(quán))是一個(gè)開放標(biāo)準(zhǔn)循捺,允許用戶讓第三方應(yīng)用訪問該用戶在某一網(wǎng)站上存儲(chǔ)的私密的資源(如照片,視頻缀雳,聯(lián)系人列表)紧显,而無需將用戶名和密碼提供給第三方應(yīng)用。
OAuth允許用戶提供一個(gè)令牌层皱,而不是用戶名和密碼來訪問他們存放在特定服務(wù)提供者的數(shù)據(jù)性锭。每一個(gè)令牌授權(quán)一個(gè)特定的網(wǎng)站(例如,視頻編輯網(wǎng)站)在特定的時(shí)段(例如叫胖,接下來的2小時(shí)內(nèi))內(nèi)訪問特定的資源(例如僅僅是某一相冊(cè)中的視頻)草冈。這樣,OAuth讓用戶可以授權(quán)第三方網(wǎng)站訪問他們存儲(chǔ)在另外服務(wù)提供者的某些特定信息瓮增,而非所有內(nèi)容怎棱。
OAuth是OpenID的一個(gè)補(bǔ)充,但是完全不同的服務(wù)绷跑。
流程梳理
拿QQ做例子拳恋,簡(jiǎn)單說一下流程:
當(dāng)用戶點(diǎn)擊QQ登陸,你會(huì)通引導(dǎo)用戶跳轉(zhuǎn)到第三方登陸的登陸界面砸捏, 當(dāng)用戶成功登錄以后會(huì)自動(dòng)跳轉(zhuǎn)回來谬运,并附帶一個(gè)code參數(shù),接著你使用code就可以獲得access token(訪問令牌)垦藏,對(duì)于QQ梆暖,由于第三方登錄結(jié)合了Openid, 所以需要再通過token獲取openid掂骏。
重點(diǎn):這個(gè)openid是和QQ用戶一一對(duì)應(yīng)的, 使用access token + openid 即可獲取用戶信息轰驳。
第三方登錄的實(shí)質(zhì)
首先說一下登錄是實(shí)質(zhì),就是證明 你是你 , 乍一看好像是一個(gè)哲學(xué)問題.
接下來做進(jìn)一步的分析, 在登錄過程中, 你所提供的用戶名,密碼代表了,你的證據(jù),代表了虛擬的 你 .
服務(wù)器中儲(chǔ)存的用戶的數(shù)據(jù), 重點(diǎn)在于用戶的唯一性, 映射了你在現(xiàn)實(shí)世界的唯一性.
登錄的完成依賴于你所提供 證據(jù) 與 服務(wù)器中數(shù)據(jù)的匹配.
為什么使用第三方登錄
那么為什么使用第三方登錄, 服務(wù)方希望用戶注冊(cè), 而用戶懶得填注冊(cè)時(shí)的各種信息(主要是為了保證用戶的唯一性,各種用戶名已占用,密碼格式限制).而像微信, QQ, 微博等幾乎每個(gè)人都會(huì)安裝的應(yīng)用中用戶肯定會(huì)在其中某一個(gè)應(yīng)用中已經(jīng)注冊(cè)過.證明該用戶在已經(jīng)注冊(cè)的應(yīng)用中的唯一性.
第三方登錄的實(shí)質(zhì)就是在授權(quán)時(shí)獲得第三方應(yīng)用提供的代表了用戶在第三方應(yīng)用中的唯一性的openid.并將openid儲(chǔ)存在第三方服務(wù)控制的本地儲(chǔ)存.
第三方登錄與本地登錄的關(guān)聯(lián)
第三方平臺(tái)和本地用戶系統(tǒng)結(jié)合應(yīng)該分為三種情況:
- 本地未登錄,第一次登錄第三方:此時(shí)相當(dāng)于注冊(cè),直接把第三方信息拉取來并注冊(cè)成本地用戶就可以了级解,并建立本地用戶與第三方用戶(openid)的綁定關(guān)系
- 本地未登錄冒黑,再次登錄第三方:此時(shí)用戶已注冊(cè),獲取到openid后直接找出對(duì)應(yīng)的本地用戶即可
- 本地登錄蠕趁,并綁定第三方: 這個(gè)只要將獲取到的openid綁定到本地用戶就可以了
第三方登錄解除授權(quán)實(shí)踐
- 已授權(quán)狀態(tài), 獲取用戶信息, 可直接獲取.
- 解除授權(quán)后/未授權(quán)狀態(tài), 直接獲取用戶信息, 需要跳轉(zhuǎn)到授權(quán)界面.
由此可以發(fā)現(xiàn), 授權(quán)狀態(tài)下,由第三方登錄sdk控制的本地儲(chǔ)存保存著 access token + openid.解除授權(quán)后,第三方sdk清除本地 access token + openid.