天天看點

聊一聊二維碼掃描登入原理

掃二維碼登入現在比較常見,比如微信、支付寶等 PC 端登入,并且好像每款 APP 都支援掃碼登入,不搞個掃碼登入都不好意思。作為技術人員,不知道您對這背後的實作邏輯是否敢興趣,反正我是一直都對這背後實作好奇。最近剛好看到一個關于掃碼登入原理的視訊,于是就整理出來了這篇文章,希望對您有所幫助。

本文共三個主題:

  • 什麼是二維碼。
  • 移動端基于 token 的認證機制。
  • 二維碼掃碼登入的原理。

1、什麼是二維碼

二維碼又稱二維條碼,常見的二維碼為QR Code,QR全稱Quick Response,是一個近幾年來移動裝置上超流行的一種編碼方式,它比傳統的Bar Code條形碼能存更多的資訊,也能表示更多的資料類型。----來自百度百科

在商品上,一般都會有條形碼,條形碼也稱為一維碼,條形碼隻能表示一串數字。二維碼要比條形碼豐富很多,可以存儲數字、字元串、圖檔、檔案等,比如我們可以把

www.baidu.com

存儲在二維碼中,掃碼二維碼我們就可以擷取到百度的位址。

可能用文字說起來還是比較難了解,您可以百度:草料二維碼,一款二維碼生成和解析工具,玩一玩你就知道二維碼是個啥了。

聊一聊二維碼掃描登入原理

2、移動端基于 token 的認證機制

在了解掃碼登入原理之前,有必要先了解移動端基于 token 的認證機制,對了解掃碼登入原理還是非常有幫助的。基于 token 的認證機制跟我們常用的賬号密碼認證方式有較大的不同,安全系數比賬号密碼要高,如果每次驗證都傳入賬号密碼,那麼被劫持的機率就變大了。

基于 token 的認證機制流程圖,如下圖所示:

聊一聊二維碼掃描登入原理

基于 token 的認證機制,隻有在第一次使用需要輸入賬号密碼,後續使用将不在輸入賬号密碼。其實在登陸的時候不僅傳入賬号、密碼,還傳入了手機的裝置資訊。在服務端驗證賬号、密碼正确後,服務端會做兩件事。

第一,将賬号與裝置關聯起來,在某種意義上,裝置資訊就代表着賬号。

第二,生成一個 token 令牌,并且在 token 與賬号、裝置關聯,類似于key/value,token 作為 key ,賬号、裝置資訊作為value,持久化在磁盤上。

将 token 傳回給移動端,移動端将 token 存入在本地,往後移動端都通過 token 通路服務端 API ,當然除了 token 之外,還需要攜帶裝置資訊,因為 token 可能會被劫持。帶上裝置資訊之後,就算 token 被劫持也沒有關系,因為裝置資訊是唯一的。

這就是基于 token 的認證機制,将賬号密碼換成了 token、裝置資訊,進而提高了安全系數,可别小看這個 token ,token 是身份憑證,在掃碼登入的時候也會用到。

3、二維碼掃碼登入的原理

好了,知道了移動端基于 token 的認證機制後,接下來就進入我們的主題:二維碼掃碼登陸的原理。先上二維碼掃碼登入的流程圖:

聊一聊二維碼掃描登入原理

掃碼登入可以分為三個階段:待掃描、已掃描待确認、已确認。我們就一一來看看這三個階段。

1、待掃描階段

待掃描階段也就是流程圖中 1~5 階段,即生成二維碼階段,這個階段跟移動端沒有關系,是 PC 端跟服務端的互動過程。

聊一聊二維碼掃描登入原理

首先 PC 端攜帶裝置資訊想服務端發起生成二維碼請求,服務端會生成唯一的二維碼 ID,你可以了解為 UUID,并且将 二維碼 ID 跟 PC 裝置資訊關聯起來,這跟移動端登入有點相似。

PC 端接受到二維碼 ID 之後,将二維碼 ID 以二維碼的形式展示,等待移動端掃碼。此時在 PC 端會啟動一個定時器,輪詢查詢二維碼的狀态。如果移動端未掃描的話,那麼一段時間後二維碼将會失效。

2、已掃描待确認階段

流程圖中第 6 ~ 10 階段,我們在 PC 端登入微信時,手機掃碼後,PC 端的二維碼會變成已掃碼,請在手機端确認。這個階段是移動端跟服務端互動的過程。

聊一聊二維碼掃描登入原理

首先移動端掃描二維碼,擷取二維碼 ID,然後将手機端登入的資訊憑證(token)和 二維碼 ID 作為參數發送給服務端,此時的手機一定是登入的,不存在沒登入的情況。

服務端接受請求後,會将 token 與二維碼 ID 關聯,為什麼需要關聯呢?你想想,我們使用微信時,移動端退出, PC 端是不是也需要退出,這個關聯就有點把子作用了。然後會生成一個一次性 token,這個 token 會傳回給移動端,一次性 token 用作确認時候的憑證。

PC 端的定時器,會輪詢到二維碼的狀态已經發生變化,會将 PC 端的二維碼更新為已掃描,請确認。

3、已确認

流程圖中的 第 11 ~ 15 步驟,這是掃碼登入的最後階段,移動端攜帶上一步驟中擷取的臨時 token ,确認登入,服務端校對完成後,會更新二維碼狀态,并且給 PC 端生成一個正式的 token ,後續 PC 端就是持有這個 token 通路服務端。

聊一聊二維碼掃描登入原理

PC 端的定時器,輪詢到了二維碼狀态為登入狀态,并且會擷取到了生成的 token ,完成登入,後續通路都基于 token 完成。

在伺服器端會跟手機端一樣,維護着 token 跟二維碼、PC 裝置資訊、賬号等資訊。

到此,二維碼掃描登入原理就差不多了,二維碼掃描登入在原理上不難了解,跟 OAuth2.0 有一絲的相似之處,但是實作起來可能就比較複雜。

希望此文對您的學習或者工作有所幫助。同時希望您在評論區聊聊您的掃碼登入工作經曆,祝好。

最後

目前網際網路上很多大佬都有二維碼掃描登入原理相關文章,如有雷同,請多多包涵了。原創不易,碼字不易,還希望大家多多支援。若文中有所錯誤之處,還望提出,謝謝。