聊一聊二维码扫描登陆原理

扫二维码登陆如今比较常见,好比微信、支付宝等 PC 端登陆,而且好像每款 APP 都支持扫码登陆,不搞个扫码登陆都很差意思。做为技术人员,不知道您对这背后的实现逻辑是否敢兴趣,反正我是一直都对这背后实现好奇。最近恰好看到一个关于扫码登陆原理的视频,因而就整理出来了这篇文章,但愿对您有所帮助。安全

本文共三个主题:服务器

  • 什么是二维码。
  • 移动端基于 token 的认证机制。
  • 二维码扫码登陆的原理。

一、什么是二维码

二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。----来自百度百科

在商品上,通常都会有条形码,条形码也称为一维码,条形码只能表示一串数字。二维码要比条形码丰富不少,能够存储数字、字符串、图片、文件等,好比咱们能够把 www.baidu.com 存储在二维码中,扫码二维码咱们就能够获取到百度的地址。微信

可能用文字提及来仍是比较难理解,您能够百度:草料二维码,一款二维码生成和解析工具,玩一玩你就知道二维码是个啥了。工具

图片描述

二、移动端基于 token 的认证机制

在了解扫码登陆原理以前,有必要先了解移动端基于 token 的认证机制,对理解扫码登陆原理仍是很是有帮助的。基于 token 的认证机制跟咱们经常使用的帐号密码认证方式有较大的不一样,安全系数比帐号密码要高,若是每次验证都传入帐号密码,那么被劫持的几率就变大了。学习

基于 token 的认证机制流程图,以下图所示:ui

基于token的认证机制

基于 token 的认证机制,只有在第一次使用须要输入帐号密码,后续使用将不在输入帐号密码。其实在登录的时候不只传入帐号、密码,还传入了手机的设备信息。在服务端验证帐号、密码正确后,服务端会作两件事编码

第一,将帐号与设备关联起来,在某种意义上,设备信息就表明着帐号。spa

第二,生成一个 token 令牌,而且在 token 与帐号、设备关联,相似于key/value,token 做为 key ,帐号、设备信息做为value,持久化在磁盘上。3d

将 token 返回给移动端,移动端将 token 存入在本地,日后移动端都经过 token 访问服务端 API ,固然除了 token 以外,还须要携带设备信息,由于 token 可能会被劫持。带上设备信息以后,就算 token 被劫持也没有关系,由于设备信息是惟一的。code

这就是基于 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 有一丝的类似之处,可是实现起来可能就比较复杂。

但愿此文对您的学习或者工做有所帮助。同时但愿您在评论区聊聊您的扫码登陆工做经历,祝好。

最后

目前互联网上不少大佬都有二维码扫描登陆原理相关文章,若有雷同,请多多包涵了。原创不易,码字不易,还但愿你们多多支持。若文中有所错误之处,还望提出,谢谢。

互联网平头哥

相关文章
相关标签/搜索