再也不怕別人問(wèn):二維碼掃碼登錄的底層原理

在日常生活中,二維碼出現(xiàn)在很多場(chǎng)景,比如超市支付、系統(tǒng)登錄、應(yīng)用下載等等。了解二維碼的原理,可以為技術(shù)人員在技術(shù)選型時(shí)提供新的思路。對(duì)于非技術(shù)人員呢,除了解惑,還可以引導(dǎo)他更好地辨別生活中遇到的各種二維碼,防止上當(dāng)受騙。

二維碼登錄的本質(zhì)
告訴系統(tǒng)我是誰(shuí) 向系統(tǒng)證明我是誰(shuí)
認(rèn)識(shí)二維碼



系統(tǒng)認(rèn)證機(jī)制

賬號(hào)密碼登錄時(shí),客戶端會(huì)將設(shè)備信息一起傳遞給服務(wù)端 如果賬號(hào)密碼校驗(yàn)通過(guò),服務(wù)端會(huì)把賬號(hào)與設(shè)備進(jìn)行一個(gè)綁定,存在一個(gè)數(shù)據(jù)結(jié)構(gòu)中,這個(gè)數(shù)據(jù)結(jié)構(gòu)中包含了賬號(hào)ID,設(shè)備ID,設(shè)備類型等等
const token = {
acountid:'賬號(hào)ID',
deviceid:'登錄的設(shè)備ID',
deviceType:'設(shè)備類型,如 iso,android,pc......',
}
客戶端得到這個(gè)token后,需要進(jìn)行一個(gè)本地保存,每次訪問(wèn)系統(tǒng)API都攜帶上token與設(shè)備信息。 服務(wù)端就可以通過(guò)token找到與它綁定的賬號(hào)與設(shè)備信息,然后把綁定的設(shè)備信息與客戶端每次傳來(lái)的設(shè)備信息進(jìn)行比較, 如果相同,那么校驗(yàn)通過(guò),返回AP接口響應(yīng)數(shù)據(jù), 如果不同,那就是校驗(yàn)不通過(guò)拒絕訪問(wèn)。
掃描二維碼登錄的一般步驟

掃碼前,手機(jī)端應(yīng)用是已登錄狀態(tài),PC端顯示一個(gè)二維碼,等待掃描 手機(jī)端打開應(yīng)用,掃描PC端的二維碼,掃描后,會(huì)提示"已掃描,請(qǐng)?jiān)谑謾C(jī)端點(diǎn)擊確認(rèn)" 用戶在手機(jī)端點(diǎn)擊確認(rèn),確認(rèn)后PC端登錄就成功了

二維碼的背后它一定存在一個(gè)唯一性的ID,當(dāng)二維碼生成時(shí),這個(gè)ID也一起生成,并且綁定了PC端的設(shè)備信息 手機(jī)去掃描這個(gè)二維碼 二維碼切換為 已掃描待確認(rèn)狀態(tài), 此時(shí)就會(huì)將賬號(hào)信息與這個(gè)ID綁定 當(dāng)手機(jī)端確認(rèn)登錄時(shí),它就會(huì)生成PC端用于登錄的token,并返回給PC端

PC端向服務(wù)端發(fā)起請(qǐng)求,告訴服務(wù)端,我要生成用戶登錄的二維碼,并且把PC端設(shè)備信息也傳遞給服務(wù)端 服務(wù)端收到請(qǐng)求后,它生成二維碼ID,并將二維碼ID與PC端設(shè)備信息進(jìn)行綁定 然后把二維碼ID返回給PC端 PC端收到二維碼ID后,生成二維碼(二維碼中肯定包含了ID) 為了及時(shí)知道二維碼的狀態(tài),客戶端在展現(xiàn)二維碼后,PC端不斷的輪詢服務(wù)端,比如每隔一秒就輪詢一次,請(qǐng)求服務(wù)端告訴當(dāng)前二維碼的狀態(tài)及相關(guān)信息

用戶用手機(jī)去掃描PC端的二維碼,通過(guò)二維碼內(nèi)容取到其中的二維碼ID 再調(diào)用服務(wù)端API將移動(dòng)端的身份信息與二維碼ID一起發(fā)送給服務(wù)端 服務(wù)端接收到后,它可以將身份信息與二維碼ID進(jìn)行綁定,生成臨時(shí)token。然后返回給手機(jī)端 因?yàn)镻C端一直在輪詢二維碼狀態(tài),所以這時(shí)候二維碼狀態(tài)發(fā)生了改變,它就可以在界面上把二維碼狀態(tài)更新為已掃描

手機(jī)端在接收到臨時(shí)token后會(huì)彈出確認(rèn)登錄界面,用戶點(diǎn)擊確認(rèn)時(shí),手機(jī)端攜帶臨時(shí)token用來(lái)調(diào)用服務(wù)端的接口,告訴服務(wù)端,我已經(jīng)確認(rèn) 服務(wù)端收到確認(rèn)后,根據(jù)二維碼ID綁定的設(shè)備信息與賬號(hào)信息,生成用戶PC端登錄的token 這時(shí)候PC端的輪詢接口,它就可以得知二維碼的狀態(tài)已經(jīng)變成了"已確認(rèn)"。并且從服務(wù)端可以獲取到用戶登錄的token 到這里,登錄就成功了,后端PC端就可以用token去訪問(wèn)服務(wù)端的資源了
可以是二維碼ID 可以是包含二維碼ID的一個(gè)url地址
總結(jié)

告訴系統(tǒng)我是誰(shuí) 向系統(tǒng)證明我誰(shuí)
一個(gè)是二維碼原理 一個(gè)是基于token的認(rèn)證機(jī)制
作者:大古同學(xué)
鏈接:https://juejin.cn/post/6940976355097985032

推薦閱讀


百度偷偷干了一件事,大家都不知道....

35年前,微軟前CEO帶貨是什么水平?

182億,懸在阿里頭上的大刀,終于落下了。
一鍵三連「分享」、「點(diǎn)贊」和「在看」
技術(shù)干貨與你天天見~
評(píng)論
圖片
表情
