一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務(wù)器之家 - 編程語言 - JavaScript - js教程 - 淺談js二維碼掃碼登錄是什么原理

淺談js二維碼掃碼登錄是什么原理

2022-03-01 16:23大古同學(xué) js教程

這篇文章主要介紹了淺談js二維碼掃碼登錄是什么原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前幾天看了極客時間一個二維碼的視頻,寫的不錯,這里總結(jié)下

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

二維碼,大家再熟悉不過了

購物掃個碼,吃飯掃個碼,坐公交也掃個碼

淺談js二維碼掃碼登錄是什么原理

淺談js二維碼掃碼登錄是什么原理

在掃碼的過程中,大家可能會有疑問:這二維碼安全嗎?會不會泄漏我的個人信息?更深度的用戶還會考慮:我的系統(tǒng)是不是也可以搞一個二維碼來推廣呢?

這時候就需要了解一下二維碼背后的技術(shù)和邏輯了!

二維碼最常用的場景之一就是通過手機(jī)端應(yīng)用掃描PC或者WEB端的二維碼,來登錄同一個系統(tǒng)。比如手機(jī)微信掃碼登錄PC端微信,手機(jī)淘寶掃碼登錄PC端淘寶。那么就讓我們來看一下,二維碼登錄是怎么操作的!

二維碼登錄的本質(zhì)

二維碼登錄本質(zhì)上也是一種登錄認(rèn)證方式。既然是登錄認(rèn)證,要做的也就兩件事情!

1、告訴系統(tǒng)我是誰

2、向系統(tǒng)證明我是誰

比如賬號密碼登錄,賬號就是告訴系統(tǒng)我是誰, 密碼就是向系統(tǒng)證明我是誰; 比如手機(jī)驗(yàn)證碼登錄,手機(jī)號就是告訴系統(tǒng)我是誰,驗(yàn)證碼就是向系統(tǒng)證明我是誰;

那么掃碼登錄是怎么做到這兩件事情的呢?我們一起來考慮一下

手機(jī)端應(yīng)用掃PC端二維碼,手機(jī)端確認(rèn)后,賬號就在PC端登錄成功了!這里,PC端登錄的賬號肯定與手機(jī)端是同一個賬號。不可能手機(jī)端登錄的是賬號A,而掃碼登錄以后,PC端登錄的是賬號B。

所以,第一件事情,告訴系統(tǒng)我是誰,是比較清楚的!

通過掃描二維碼,把手機(jī)端的賬號信息傳遞到PC端,至于是怎么傳的,我們后面再說

第二件事情,向系統(tǒng)證明我是誰。掃碼登錄過程中,用戶并沒有去輸入密碼,也沒有輸入驗(yàn)證碼,或者其他什么碼。那是怎么證明的呢?

有些同學(xué)會想到,是不是掃碼過程中,把密碼傳到了PC端呢?但這是不可能的。因?yàn)槟菢犹话踩模蛻舳艘哺静粫ゴ鎯γ艽a。我們仔細(xì)想一下,其實(shí)手機(jī)端APP它是已經(jīng)登錄過的,就是說手機(jī)端是已經(jīng)通過登錄認(rèn)證。所說只要掃碼確認(rèn)是這個手機(jī)且是這個賬號操作的,其實(shí)就能間接證明我誰。

認(rèn)識二維碼

那么如何做確認(rèn)呢?我們后面會詳細(xì)說明,在這之前我們需要先認(rèn)識一下二維碼!在認(rèn)識二維碼之前我們先看一下一維碼!

淺談js二維碼掃碼登錄是什么原理

所謂一維碼,也就是條形碼,超市里的條形碼--這個相信大家都非常熟悉,條形碼實(shí)際上就是一串?dāng)?shù)字,它上面存儲了商品的序列號。

二維碼其實(shí)與條形碼類似,只不過它存儲的不一定是數(shù)字,還可以是任何的字符串,你可以認(rèn)為,它就是字符串的另外一種表現(xiàn)形式,

在搜索引擎中搜索二維碼,你可以找到很多在線生成二維碼的工具網(wǎng)站,這些網(wǎng)站可以提供字符串與二維碼之間相互轉(zhuǎn)換的功能,比如 草料二維碼網(wǎng)站

淺談js二維碼掃碼登錄是什么原理

在左邊的輸入框就可以輸入你的內(nèi)容,它可以是文本、網(wǎng)址,文件........。然后就可以生成代表它們的二維碼

你也可以把二維碼上傳,進(jìn)行”解碼“,然后就可以解析出二維碼代表的含義

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

認(rèn)識了二維碼,我們了解一下移動互聯(lián)網(wǎng)下的系統(tǒng)認(rèn)證機(jī)制。

前面我們說過,為了安全,手機(jī)端它是不會存儲你的登錄密碼的。但是在日常使用過程中,我們應(yīng)該會注意到,只有在你的應(yīng)用下載下來后,第一次登錄的時候,才需要進(jìn)行一個賬號密碼的登錄, 那之后呢 即使這個應(yīng)用進(jìn)程被殺掉,或者手機(jī)重啟,都是不需要再次輸入賬號密碼的,它可以自動登錄。

其實(shí)這背后就是一套基于token的認(rèn)證機(jī)制,我們來看一下這套機(jī)制是怎么運(yùn)行的,

淺談js二維碼掃碼登錄是什么原理

賬號密碼登錄時,客戶端會將設(shè)備信息一起傳遞給服務(wù)端, 如果賬號密碼校驗(yàn)通過,服務(wù)端會把賬號與設(shè)備進(jìn)行一個綁定,存在一個數(shù)據(jù)結(jié)構(gòu)中,這個數(shù)據(jù)結(jié)構(gòu)中包含了賬號ID,設(shè)備ID,設(shè)備類型等等

  1. const token = {
  2. acountid:'賬號ID',
  3. deviceid:'登錄的設(shè)備ID',
  4. deviceType:'設(shè)備類型,如 iso,android,pc......',
  5. }

然后服務(wù)端會生成一個token,用它來映射數(shù)據(jù)結(jié)構(gòu),這個token其實(shí)就是一串有著特殊意義的字符串,它的意義就在于,通過它可以找到對應(yīng)的賬號與設(shè)備信息,

  • 客戶端得到這個token后,需要進(jìn)行一個本地保存,每次訪問系統(tǒng)API都攜帶上token與設(shè)備信息。
  • 服務(wù)端就可以通過token找到與它綁定的賬號與設(shè)備信息,然后把綁定的設(shè)備信息與客戶端每次傳來的設(shè)備信息進(jìn)行比較, 如果相同,那么校驗(yàn)通過,返回AP接口響應(yīng)數(shù)據(jù), 如果不同,那就是校驗(yàn)不通過拒絕訪問

從前面這個流程,我們可以看到,客戶端不會也沒必要保存你的密碼,相反,它是保存了token。可能有些同學(xué)會想,這個token這么重要,萬一被別人知道了怎么辦。實(shí)際上,知道了也沒有影響, 因?yàn)樵O(shè)備信息是唯一的,只要你的設(shè)備信息別人不知道, 別人拿其他設(shè)備來訪問,驗(yàn)證也是不通過的。

可以說,客戶端登錄的目的,就是獲得屬于自己的token。

那么在掃碼登錄過程中,PC端是怎么獲得屬于自己的token呢?不可能手機(jī)端直接把自己的token給PC端用!token只能屬于某個客戶端私有,其他人或者是其他客戶端是用不了的。在分析這個問題之前,我們有必要先梳理一下,掃描二維碼登錄的一般步驟是什么樣的。這可以幫助我們梳理清楚整個過程,

掃描二維碼登錄的一般步驟

 

大概流程

淺談js二維碼掃碼登錄是什么原理

1、掃碼前,手機(jī)端應(yīng)用是已登錄狀態(tài),PC端顯示一個二維碼,等待掃描

2、手機(jī)端打開應(yīng)用,掃描PC端的二維碼,掃描后,會提示"已掃描,請在手機(jī)端點(diǎn)擊確認(rèn)"

3、用戶在手機(jī)端點(diǎn)擊確認(rèn),確認(rèn)后PC端登錄就成功了

可以看到,二維碼在中間有三個狀態(tài), 待掃描,已掃描待確認(rèn),已確認(rèn)。那么可以想象

淺談js二維碼掃碼登錄是什么原理

1、二維碼的背后它一定存在一個唯一性的ID,當(dāng)二維碼生成時,這個ID也一起生成,并且綁定了PC端的設(shè)備信息

2、手機(jī)去掃描這個二維碼

3、二維碼切換為 已掃描待確認(rèn)狀態(tài), 此時就會將賬號信息與這個ID綁定

4、當(dāng)手機(jī)端確認(rèn)登錄時,它就會生成PC端用于登錄的token,并返回給PC端

好了,到這里,基本思路就已經(jīng)清晰了,接下來我們把整個過程再具體化一下

二維碼準(zhǔn)備

按二維碼不同狀態(tài)來看, 首先是等待掃描狀態(tài),用戶打開PC端,切換到二維碼登錄界面時。

淺談js二維碼掃碼登錄是什么原理

1、PC端向服務(wù)端發(fā)起請求,告訴服務(wù)端,我要生成用戶登錄的二維碼,并且把PC端設(shè)備信息也傳遞給服務(wù)端

2、服務(wù)端收到請求后,它生成二維碼ID,并將二維碼ID與PC端設(shè)備信息進(jìn)行綁定

3、然后把二維碼ID返回給PC端

4、PC端收到二維碼ID后,生成二維碼(二維碼中肯定包含了ID)

5、為了及時知道二維碼的狀態(tài),客戶端在展現(xiàn)二維碼后,PC端不斷的輪詢服務(wù)端,比如每隔一秒就輪詢一次,請求服務(wù)端告訴當(dāng)前二維碼的狀態(tài)及相關(guān)信息

二維碼已經(jīng)準(zhǔn)好了,接下來就是掃描狀態(tài)

掃描狀態(tài)切換

淺談js二維碼掃碼登錄是什么原理

1、用戶用手機(jī)去掃描PC端的二維碼,通過二維碼內(nèi)容取到其中的二維碼ID

2、再調(diào)用服務(wù)端API將移動端的身份信息與二維碼ID一起發(fā)送給服務(wù)端

3、服務(wù)端接收到后,它可以將身份信息與二維碼ID進(jìn)行綁定,生成臨時token。然后返回給手機(jī)端

4、因?yàn)镻C端一直在輪詢二維碼狀態(tài),所以這時候二維碼狀態(tài)發(fā)生了改變,它就可以在界面上把二維碼狀態(tài)更新為已掃描

那么為什么需要返回給手機(jī)端一個臨時token呢?臨時token與token一樣,它也是一種身份憑證,不同的地方在于它只能用一次,用過就失效。

在第三步驟中返回臨時token,為的就是手機(jī)端在下一步操作時,可以用它作為憑證。以此確保掃碼,登錄兩步操作是同一部手機(jī)端發(fā)出的,

狀態(tài)確認(rèn)

最后就是狀態(tài)的確認(rèn)了。

淺談js二維碼掃碼登錄是什么原理

1、手機(jī)端在接收到臨時token后會彈出確認(rèn)登錄界面,用戶點(diǎn)擊確認(rèn)時,手機(jī)端攜帶臨時token用來調(diào)用服務(wù)端的接口,告訴服務(wù)端,我已經(jīng)確認(rèn)

2、服務(wù)端收到確認(rèn)后,根據(jù)二維碼ID綁定的設(shè)備信息與賬號信息,生成用戶PC端登錄的token

3、這時候PC端的輪詢接口,它就可以得知二維碼的狀態(tài)已經(jīng)變成了"已確認(rèn)"。并且從服務(wù)端可以獲取到用戶登錄的token

4、到這里,登錄就成功了,后端PC端就可以用token去訪問服務(wù)端的資源了

掃碼動作的基礎(chǔ)流程都講完了,有些細(xì)節(jié)還沒有深入介紹,

比如二維碼的內(nèi)容是什么?

  • 可以是二維碼ID
  • 可以是包含二維碼ID的一個url地址 在掃碼確認(rèn)這一步,用戶取消了怎么處理?這些細(xì)節(jié)都留給大家思考

總結(jié)

淺談js二維碼掃碼登錄是什么原理

我們從登陸的本質(zhì)觸發(fā),探索二維碼掃碼登錄是如何做到的

1、告訴系統(tǒng)我是誰

2、向系統(tǒng)證明我誰

在這個過程中,我們先簡單講了兩個前提知識,

  • 一個是二維碼原理,
  • 一個是基于token的認(rèn)證機(jī)制。

然后我們以二維碼狀態(tài)為軸,分析了這背后的邏輯: 通過token認(rèn)證機(jī)制與二維碼狀態(tài)變化來實(shí)現(xiàn)掃碼登錄.

需要指出的是,前面的講的登錄流程,它適用于同一個系統(tǒng)的PC端,WEB端,移動端。

平時我們還有另外一種場景也比較常見,那就是通過第三方應(yīng)用來掃碼登錄,比如極客時間/掘金 都可以選擇微信/QQ等掃碼登錄,那么這種通過第三方應(yīng)用掃碼登錄又是什么原理呢?

到此這篇關(guān)于淺談js二維碼掃碼登錄是什么原理的文章就介紹到這了,更多相關(guān)js二維碼掃碼登錄內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://juejin.cn/post/6940976355097985032

延伸 · 閱讀

精彩推薦
  • js教程js實(shí)現(xiàn)有趣的倒計時效果

    js實(shí)現(xiàn)有趣的倒計時效果

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)有趣的倒計時效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    搬磚大法4532022-01-04
  • js教程Javascript中的奇葩知識,你知道嗎?

    Javascript中的奇葩知識,你知道嗎?

    這篇文章主要介紹了一些Javascript中的奇葩知識,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下...

    原罪7972022-01-06
  • js教程JavaScript實(shí)現(xiàn)原型封裝輪播圖

    JavaScript實(shí)現(xiàn)原型封裝輪播圖

    這篇文章主要為大家詳細(xì)介紹了JavaScript原型封裝輪播圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    zyhyoustrive12292021-12-21
  • js教程NestJs使用Mongoose對MongoDB操作的方法

    NestJs使用Mongoose對MongoDB操作的方法

    這篇文章主要介紹了NestJs使用Mongoose對MongoDB操作的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友...

    ragga-time4092022-01-22
  • js教程微信小程序全局狀態(tài)的深入講解

    微信小程序全局狀態(tài)的深入講解

    這篇文章主要介紹了微信小程序全局狀態(tài)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們...

    明月依舊9512022-02-17
  • js教程50行代碼實(shí)現(xiàn)Webpack組件使用次數(shù)統(tǒng)計

    50行代碼實(shí)現(xiàn)Webpack組件使用次數(shù)統(tǒng)計

    這篇文章主要介紹了50行代碼實(shí)現(xiàn)Webpack組件使用次數(shù)統(tǒng)計,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友...

    又在吃魚8692022-02-12
  • js教程Elasticsearch工具cerebro的安裝與使用教程

    Elasticsearch工具cerebro的安裝與使用教程

    這篇文章主要介紹了Elasticsearch工具cerebro的安裝與使用教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參...

    木子那個李7942022-02-13
  • js教程基于JS簡單實(shí)現(xiàn)手持彈幕功能+文字抖動特效代碼

    基于JS簡單實(shí)現(xiàn)手持彈幕功能+文字抖動特效代碼

    這篇文章主要介紹了基于JS簡單實(shí)現(xiàn)手持彈幕功能+文字抖動特效代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋...

    aimengmei4892022-02-22
主站蜘蛛池模板: 精品综合一区二区三区 | 性欧美hd| 2020最新版的ab片 | www.av色| 男人j放进女人的p免费看视频 | yy3341殇情影院理论片 | 东北美女野外bbwbbw免费 | 88av视频在线观看 | 睡男神的这件小事小说在线阅读 | 2019年国产不卡在线刷新 | 王淑兰李思雨李铁柱乡村小说免费 | 男人久久天堂 | 青青99| 我的男友是消防员在线观看 | 手机免费在线视频 | 久久人妻熟女中文字幕AV蜜芽 | 国产成人亚洲综合网站不卡 | 秀婷程仪公欲息肉婷在线观看 | 亚洲福利天堂网福利在线观看 | 成人榴莲视频 | 大乳孕妇一级毛片 | 成人亚洲精品一区 | 96日本xxxxxxxxx70 95在线观看精品视频 | 精品九九视频 | 国产精品久久久久毛片真精品 | 暖暖日本在线观看免费 | 人妖巨茎video | 天天天做天天天天爱天天想 | 丝瓜视频在线观看污 | 新影音先锋男人色资源网 | 美女翘臀内疯狂进出 | 免费看日本| 我半夜摸妺妺的奶C了她 | 俄罗斯bbbbbbxxxxxx | 交欧美 | 無码一区中文字幕少妇熟女网站 | 日本无翼乌漫画 | 好大好粗好舒服 | 欧洲喷浆乌克兰 | 91大神大战高跟丝袜美女 | 成年人免费观看的视频 |