作者 | 互联网平头哥

本文经授权转载自互联网平头哥(ID:it_pingtouge)

扫二维码登录现在比较常见,比如微信、支付宝等 PC 端登录,并且好像每款 APP 都支持扫码登录,不搞个扫码登录都不好意思。作为技术人员,不知道您对这背后的实现逻辑是否感兴趣,反正我是一直都对这背后实现好奇。最近刚好看到一个关于扫码登录原理的视频,于是就整理出来了这篇文章,希望对您有所帮助。

本文共三个主题:什么是二维码。移动端基于 token 的认证机制。二维码扫码登录的原理。

什么是二维码

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

在商品上,一般都会有条形码,条形码也称为一维码,条形码只能表示一串数字。二维码要比条形码丰富很多,可以存储数字、字符串、图片、文件等,比如我们可以把 www.baidu.com 存储在二维码中,扫码二维码我们就可以获取到百度的地址。

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

移动端基于 token 的认证机制

在了解扫码登录原理之前,有必要先了解移动端基于 token 的认证机制,对理解扫码登录原理还是非常有帮助的。基于 token 的认证机制跟我们常用的账号密码认证方式有较大的不同,安全系数比账号密码要高,如果每次验证都传入账号密码,那么被劫持的概率就变大了。

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

基于token的认证机制

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

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

第二,生成一个 token 令牌,并且在 token 与账号、设备关联,类似于key/value,token 作为 key ,账号、设备信息作为value,持久化在磁盘上。

将 token 返回给移动端,移动端将 token 存入在本地,往后移动端都通过 token 访问服务端 API ,当然除了 token 之外,还需要携带设备信息,因为 token 可能会被劫持。带上设备信息之后,就算 token 被劫持也没有关系,因为设备信息是唯一的。

这就是基于 token 的认证机制,将账号密码换成了 token、设备信息,从而提高了安全系数,可别小看这个 token ,token 是身份凭证,在扫码登录的时候也会用到。

二维码扫码登录的原理

好了,知道了移动端基于 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 设备信息、账号等信息,后续的认证也是基于 token 和设备信息来完成。

到此,二维码扫描登录原理就差不多了,二维码扫描登录在原理上不难理解,跟 OAuth2.0 有一丝的相似之处,但是实现起来可能就比较复杂。

希望此文对您的学习或者工作有所帮助。同时希望您在评论区聊聊您的扫码登录工作经历,祝好。

欢迎所有开发者扫描下方二维码填写《开发者与AI大调研》,只需2分钟,便可收获价值299元的「AI开发者万人大会」在线直播门票!

更多精彩推荐

☞程序员职场背锅甩锅指南

☞“Hey Siri” 背后的黑科技大揭秘!

☞红外光抗疫、成功预测新基建,投资 280 家企业的光学博士到底是谁?

如何做一名出色的初级开发?

半小时训练亿级规模知识图谱,亚马逊AI开源知识图谱嵌入表示框架DGL-KE

警惕!新骗术出现:这些虚假二维码生成器已成功盗取 4.6 万美元!

☞“出道” 5 年采用率达 78%,Kubernetes 的成功秘诀是什么?

你点的每个“在看”,我都认真当成了喜欢

二维码扫描登录,你必须知道的 3 件事!相关推荐

  1. uniapp中qrcode生成二维码后传的参数不见了_二维码扫描登录,你必须知道的 3 件事...

    作者 | 互联网平头哥 本文经授权转载自互联网平头哥(ID:it_pingtouge) 扫二维码登录现在比较常见,比如微信.支付宝等 PC 端登录,并且好像每款 APP 都支持扫码登录,不搞个扫码登录 ...

  2. 聊一聊二维码扫描登录原理

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:2 个月的面试亲身经历告诉大家,如何进入大厂? 扫二维码登录现在比较常见,比如微信.支付宝等 PC 端登录,并且 ...

  3. Android 应用之二维码扫描登录

    下面介绍二维码扫描登录原理, 首先需要web服务端,和app客户端. web服务端主要工作是生成二维码,检测客户端提交信息正确性,更新网页界面. app客户端主要工作是扫描二维码,提交账户信息(此不是 ...

  4. 微信二维码扫描登录原理解析

    扫二维码登录现在比较常见,比如微信.支付宝等 PC 端登录,并且好像每款 APP 都支持扫码登录. 一,传统项目移动端基于 token 的认证机制 在了解扫码登录原理之前,有必要先了解移动端基于 to ...

  5. Android实现二维码扫描登录网页

    之前写过一个二维码扫描demo,用的Zxing的框架,点击下载,后续扫描二维码中出现一些问题,比如解决压缩图片,调整扫描窗口大小等等.后续单位要求做扫描登录实现,发现难点就是怎么知道你扫描的是这台电脑 ...

  6. 微信电脑网页二维码扫描登录简单实现

    补充: 从后台看到,好像很多非技术人员从搜索引擎收到本博客,好像目的是因为不知道网页版的微信登录地址.这里提供一下. https://wx.qq.com/   点击链接,用手机微信扫描一下就可以登录了 ...

  7. 实现手机扫描二维码页面登录,类似web微信-第三篇,手机客户端

    上一篇,介绍了二维码生成的机制,紧接着,我们就要开发手机客户端来识别这个二维码. 二维码,实际上是记录了这个页面的sessionID,目的是为了最后让服务器能通过long polling的机制去通知到 ...

  8. 微信扫描二维码快速登录网站

    在近期的一个项目中用到了微信扫描注册.登录网站功能所以整理了下希望对读者有帮助. 首先,你需要有一个没有绑定微信.微信公众平台的邮箱注册成为微信开放平台开发者,在管理中心创建移动应用.或者网站应用获得 ...

  9. 实现手机扫描二维码页面登录,类似web微信-第一篇,业务分析

    关于XMPP组件的文章,先休息两天,好歹已经完整的写了一份. 这两天,先实现一套关于web微信扫描二维码页面登录的试验,因为这种模式在我们的很多业务场景里大有前途. 首先介绍一下web微信登录的过程 ...

  10. 二维码扫描讲解系统设计方法

    二维码扫描讲解系统设计方法 测试软件平台进入: http://www.cqu-media.top http://www.cqu-media.com/qrcode.aspx http://www.cqu ...

最新文章

  1. HTC Element Behaviors in Internet Explorer.
  2. JDK 5.0 注解的使用
  3. C#怎么通过一个按钮Button,实现点击这个按钮可以打开一个文件或者文件夹?
  4. Keil精确测量代码运行时间
  5. 自己写一个实现ApplicationListener​接口并且把该组件加入到容器中
  6. 我要3万取款机怎么取_7万的新宝骏RS-3怎么样?用车三个月后,车主说出了实话...
  7. python解决现实问题的思想_高级语言程序设计(Python)
  8. myeclipse上SVN代码合并详细步骤图解
  9. python-学生管理系统--7-显示功能模块
  10. Officescan防毒墙安装部署手册
  11. 带你快速入门计算机网络模型与5G协议!!
  12. Java 替换word文档文字
  13. 怎么留住好员工来实现企业优势
  14. 关于硬盘扇区的基本知识
  15. 【ExpandTabView】Android 仿大众,美团下拉菜单ExpandTabView
  16. partition by mysql_详解Oracle查询中OVER (PARTITION BY ..)用法
  17. MICROS 9700安装
  18. Can‘t connet to repository from configured remote.
  19. 不可逆调速matlab,双闭环不可逆直流调速系统课程设计(matlab仿真设计).pdf
  20. 计算机操作系统【慕课版】课后习题解答

热门文章

  1. 从一个插座面板开始说故事
  2. 雅虎邮箱 找回密码_如何恢复被遗忘的Yahoo! 密码
  3. java雅虎邮件发送
  4. github | 马赛克去除项目
  5. wow工程修理机器人图纸_魔兽世界修理机器人-魔兽世界工程修理机器人图纸哪有啊?魔兽世界 – 手机爱问...
  6. freeswitch 解决方案之视频会议
  7. 2021农行研发中心面试题总结
  8. vtuber面部捕捉工具_做一名VTuber 虚拟UP主需要准备哪些?
  9. 快速实现ARM和DSP的通信和协同工作
  10. Python—Django中的视图(views.py)