新聞中心
掃二維碼登錄現(xiàn)在比較常見,比如微信、支付寶等 PC 端登錄,并且好像每款 APP 都支持掃碼登錄,不搞個掃碼登錄都不好意思。作為技術(shù)人員,不知道您對這背后的實(shí)現(xiàn)邏輯是否感興趣,反正我是一直都對這背后實(shí)現(xiàn)好奇。最近剛好看到一個關(guān)于掃碼登錄原理的視頻,于是就整理出來了這篇文章,希望對您有所幫助。

阿城ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
本文共三個主題:
- 什么是二維碼。
- 移動端基于 token 的認(rèn)證機(jī)制。
- 二維碼掃碼登錄的原理。
1、什么是二維碼
二維碼又稱二維條碼,常見的二維碼為QR Code,QR全稱Quick Response,是一個近幾年來移動設(shè)備上超流行的一種編碼方式,它比傳統(tǒng)的Bar Code條形碼能存更多的信息,也能表示更多的數(shù)據(jù)類型。----來自百度百科
在商品上,一般都會有條形碼,條形碼也稱為一維碼,條形碼只能表示一串?dāng)?shù)字。二維碼要比條形碼豐富很多,可以存儲數(shù)字、字符串、圖片、文件等,比如我們可以把 www.baidu.com 存儲在二維碼中,掃碼二維碼我們就可以獲取到百度的地址。
可能用文字說起來還是比較難理解,您可以百度:草料二維碼,一款二維碼生成和解析工具,玩一玩你就知道二維碼是個啥了。
2、移動端基于 token 的認(rèn)證機(jī)制
在了解掃碼登錄原理之前,有必要先了解移動端基于 token 的認(rèn)證機(jī)制,對理解掃碼登錄原理還是非常有幫助的。基于 token 的認(rèn)證機(jī)制跟我們常用的賬號密碼認(rèn)證方式有較大的不同,安全系數(shù)比賬號密碼要高,如果每次驗(yàn)證都傳入賬號密碼,那么被劫持的概率就變大了。
基于 token 的認(rèn)證機(jī)制流程圖,如下圖所示:
基于token的認(rèn)證機(jī)制
基于 token 的認(rèn)證機(jī)制,只有在第一次使用需要輸入賬號密碼,后續(xù)使用將不在輸入賬號密碼。「其實(shí)在登陸的時候不僅傳入賬號、密碼,還傳入了手機(jī)的設(shè)備信息。在服務(wù)端驗(yàn)證賬號、密碼正確后,服務(wù)端會做兩件事」。
第一,將賬號與設(shè)備關(guān)聯(lián)起來,在某種意義上,設(shè)備信息就代表著賬號。
第二,生成一個 token 令牌,并且在 token 與賬號、設(shè)備關(guān)聯(lián),類似于key/value,token 作為 key ,賬號、設(shè)備信息作為value,持久化在磁盤上。
將 token 返回給移動端,移動端將 token 存入在本地,往后移動端都通過 token 訪問服務(wù)端 API ,當(dāng)然除了 token 之外,還需要攜帶設(shè)備信息,因?yàn)?token 可能會被劫持。帶上設(shè)備信息之后,就算 token 被劫持也沒有關(guān)系,因?yàn)樵O(shè)備信息是唯一的。
這就是基于 token 的認(rèn)證機(jī)制,將賬號密碼換成了 token、設(shè)備信息,從而提高了安全系數(shù),可別小看這個 token ,token 是身份憑證,在掃碼登錄的時候也會用到。
3、二維碼掃碼登錄的原理
好了,知道了移動端基于 token 的認(rèn)證機(jī)制后,接下來就進(jìn)入我們的主題:二維碼掃碼登陸的原理。先上二維碼掃碼登錄的流程圖:
掃碼登錄全流程
掃碼登錄可以分為三個階段:「待掃描、已掃描待確認(rèn)、已確認(rèn)」。我們就一一來看看這三個階段。
「1、待掃描階段」
待掃描階段也就是流程圖中 1~5 階段,即生成二維碼階段,這個階段跟移動端沒有關(guān)系,是 PC 端跟服務(wù)端的交互過程。
首先 PC 端攜帶設(shè)備信息向服務(wù)端發(fā)起生成二維碼請求,服務(wù)端會生成唯一的二維碼 ID,你可以理解為 UUID,并且將 二維碼 ID 跟 PC 設(shè)備信息關(guān)聯(lián)起來,這跟移動端登錄有點(diǎn)相似。
PC 端接受到二維碼 ID 之后,將二維碼 ID 以二維碼的形式展示,等待移動端掃碼。此時在 PC 端會啟動一個定時器,輪詢查詢二維碼的狀態(tài)?!溉绻苿佣宋磼呙璧脑挘敲匆欢螘r間后二維碼將會失效。」
「2、已掃描待確認(rèn)階段」
流程圖中第 6 ~ 10 階段,我們在 PC 端登錄微信時,手機(jī)掃碼后,PC 端的二維碼會變成已掃碼,請?jiān)谑謾C(jī)端確認(rèn)。這個階段是移動端跟服務(wù)端交互的過程。
首先移動端掃描二維碼,獲取二維碼 ID,「然后將手機(jī)端登錄的信息憑證(token)和 二維碼 ID 作為參數(shù)發(fā)送給服務(wù)端」,此時的手機(jī)一定是登錄的,不存在沒登錄的情況。
服務(wù)端接受請求后,會將 token 與二維碼 ID 關(guān)聯(lián),為什么需要關(guān)聯(lián)呢?你想想,我們使用微信時,移動端退出, PC 端是不是也需要退出,這個關(guān)聯(lián)就有點(diǎn)把子作用了。然后會「生成一個一次性 token,這個 token 會返回給移動端,一次性 token 用作確認(rèn)時候的憑證」。
PC 端的定時器,會輪詢到二維碼的狀態(tài)已經(jīng)發(fā)生變化,會將 PC 端的二維碼更新為已掃描,請確認(rèn)。
「3、已確認(rèn)」
流程圖中的 第 11 ~ 15 步驟,這是掃碼登錄的最后階段,移動端攜帶上一步驟中獲取的臨時 token ,確認(rèn)登錄,「服務(wù)端校對完成后,會更新二維碼狀態(tài),并且給 PC 端生成一個正式的 token ,后續(xù) PC 端就是持有這個 token 訪問服務(wù)端」。
PC 端的定時器,輪詢到了二維碼狀態(tài)為登錄狀態(tài),并且會獲取到了生成的 token ,完成登錄,后續(xù)訪問都基于 token 完成。
在服務(wù)器端會跟手機(jī)端一樣,維護(hù)著 token 跟二維碼、PC 設(shè)備信息、賬號等信息,后續(xù)的認(rèn)證也是基于 token 和設(shè)備信息來完成。
到此,二維碼掃描登錄原理就差不多了,二維碼掃描登錄在原理上不難理解,跟 OAuth2.0 有一絲的相似之處,但是實(shí)現(xiàn)起來可能就比較復(fù)雜。
希望此文對您的學(xué)習(xí)或者工作有所幫助。同時希望您在評論區(qū)聊聊您的掃碼登錄工作經(jīng)歷,祝好。
本文名稱:你了解二維碼掃描背后的登錄原理嗎?
網(wǎng)站地址:http://www.dlmjj.cn/article/ccsjhss.html


咨詢
建站咨詢
