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

掃二維碼登陸如今比較常見,好比微信、支付寶等 PC 端登陸,而且好像每款 APP 都支持掃碼登陸,不搞個掃碼登陸都很差意思。做爲技術人員,不知道您對這背後的實現邏輯是否敢興趣,反正我是一直都對這背後實現好奇。最近恰好看到一個關於掃碼登陸原理的視頻,因而就整理出來了這篇文章,但願對您有所幫助。安全

本文共三個主題:服務器

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

一、什麼是二維碼

二維碼又稱二維條碼,常見的二維碼爲QR Code,QR全稱Quick Response,是一個近幾年來移動設備上超流行的一種編碼方式,它比傳統的Bar Code條形碼能存更多的信息,也能表示更多的數據類型。----來自百度百科微信

在商品上,通常都會有條形碼,條形碼也稱爲一維碼,條形碼只能表示一串數字。二維碼要比條形碼豐富不少,能夠存儲數字、字符串、圖片、文件等,好比咱們能夠把 www.baidu.com 存儲在二維碼中,掃碼二維碼咱們就能夠獲取到百度的地址。工具

可能用文字提及來仍是比較難理解,您能夠百度:草料二維碼,一款二維碼生成和解析工具,玩一玩你就知道二維碼是個啥了。學習

圖片描述

二、移動端基於 token 的認證機制

在瞭解掃碼登陸原理以前,有必要先了解移動端基於 token 的認證機制,對理解掃碼登陸原理仍是很是有幫助的。基於 token 的認證機制跟咱們經常使用的帳號密碼認證方式有較大的不一樣,安全係數比帳號密碼要高,若是每次驗證都傳入帳號密碼,那麼被劫持的機率就變大了。ui

基於 token 的認證機制流程圖,以下圖所示:編碼

基於token的認證機制

基於 token 的認證機制,只有在第一次使用須要輸入帳號密碼,後續使用將不在輸入帳號密碼。其實在登錄的時候不只傳入帳號、密碼,還傳入了手機的設備信息。在服務端驗證帳號、密碼正確後,服務端會作兩件事code

第一,將帳號與設備關聯起來,在某種意義上,設備信息就表明着帳號。cdn

第二,生成一個 token 令牌,而且在 token 與帳號、設備關聯,相似於key/value,token 做爲 key ,帳號、設備信息做爲value,持久化在磁盤上。視頻

將 token 返回給移動端,移動端將 token 存入在本地,日後移動端都經過 token 訪問服務端 API ,固然除了 token 以外,還須要攜帶設備信息,由於 token 可能會被劫持。帶上設備信息以後,就算 token 被劫持也沒有關係,由於設備信息是惟一的。

這就是基於 token 的認證機制,將帳號密碼換成了 token、設備信息,從而提升了安全係數,可別小看這個 token ,token 是身份憑證,在掃碼登陸的時候也會用到。

三、二維碼掃碼登陸的原理

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

掃碼登陸全流程

掃碼登陸能夠分爲三個階段:待掃描、已掃描待確認、已確認。咱們就一一來看看這三個階段。

一、待掃描階段

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

待掃描的二維碼

首先 PC 端攜帶設備信息想服務端發起生成二維碼請求,服務端會生成惟一的二維碼 ID,你能夠理解爲 UUID,而且將 二維碼 ID 跟 PC 設備信息關聯起來,這跟移動端登陸有點類似。

PC 端接受到二維碼 ID 以後,將二維碼 ID 以二維碼的形式展現,等待移動端掃碼。此時在 PC 端會啓動一個定時器,輪詢查詢二維碼的狀態。若是移動端未掃描的話,那麼一段時間後二維碼將會失效。

二、已掃描待確認階段

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

待確認的二維碼

首先移動端掃描二維碼,獲取二維碼 ID,而後將手機端登陸的信息憑證(token)和 二維碼 ID 做爲參數發送給服務端,此時的手機必定是登陸的,不存在沒登陸的狀況。

服務端接受請求後,會將 token 與二維碼 ID 關聯,爲何須要關聯呢?你想一想,咱們使用微信時,移動端退出, PC 端是否是也須要退出,這個關聯就有點把子做用了。而後會生成一個一次性 token,這個 token 會返回給移動端,一次性 token 用做確認時候的憑證

PC 端的定時器,會輪詢到二維碼的狀態已經發生變化,會將 PC 端的二維碼更新爲已掃描,請確認。

三、已確認

流程圖中的 第 11 ~ 15 步驟,這是掃碼登陸的最後階段,移動端攜帶上一步驟中獲取的臨時 token ,確認登陸,服務端校對完成後,會更新二維碼狀態,而且給 PC 端生成一個正式的 token ,後續 PC 端就是持有這個 token 訪問服務端

手機端確認狀態

PC 端的定時器,輪詢到了二維碼狀態爲登陸狀態,而且會獲取到了生成的 token ,完成登陸,後續訪問都基於 token 完成。

在服務器端會跟手機端同樣,維護着 token 跟二維碼、PC 設備信息、帳號等信息。

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

但願此文對您的學習或者工做有所幫助。同時但願您在評論區聊聊您的掃碼登陸工做經歷,祝好。

最後

目前互聯網上不少大佬都有二維碼掃描登陸原理相關文章,若有雷同,請多多包涵了。原創不易,碼字不易,還但願你們多多支持。若文中有所錯誤之處,還望提出,謝謝。

互聯網平頭哥
相關文章
相關標籤/搜索