二维码扫码登录原理

news/2025/1/16 10:57:48/

 

 

简介


二维码扫码登录这个操作,在我们的日常生活和工作中频频出现。

这种操作主要发生于:在手机设备已经登录的情况下,需要在电脑PC端应用或者网页应用也登录,这时,如果该应用支持扫码登录,我们就可以用手机端的应用来扫描PC端生成的一个二维码,进而进行登录。如下图所示:

 

比如我们每个人几乎都会接触过的:

微信扫码登录、QQ扫码登录、网易云音乐扫码登录、百度网盘扫码登录等等。

 

首先,我们来简单描述一下扫码登录这个流程,用微信登录进行举例:

假设:手机端已经登录了微信,这时需要在PC端登录

(1)PC端生成一个二维码,等待扫描

(2)使用手机端微信的扫一扫功能扫码二维码

(3)手机端解析二维码并弹出确认登录弹窗,此时PC端的二维码状态显示为:已扫描,等待确认

  (4) 手机端点击确认登录,这时PC端的微信完成登录

 

分析


以上几个大体步骤就是我们进行扫码登录的一个基本流程。那么,我们要如何去设计这么一个功能呢?

在开始设计之前,我们需要思考明白一下几个关键点:

  • 在手机端进行确认登录的时候,为什么PC端就能直接登录?

  • 在扫码登录整个过程中,手机端和PC端是否需要有数据传输(如用户ID或者用户名+密码)?

  • 如何保证扫码登录的过程是安全的,非信息暴露泄漏的?

  • PC端是如何检测到二维码的状态的(已扫描、已取消、已确认等)?

 

首先,前两个问题我们一起综合分析:

在扫码登录过程中,需要明确的是,手机端和PC端是肯定有数据交互的,不然PC端是无法登录得了的。那双端交互的这个数据会是用户ID或者用户名密码吗?

先排除后者,传输用户名密码最大的缺点就是用户敏感信息可能会造成泄漏,其次是,我们平常输入用户名密码登录,是客户端传输数据到服务器,然后在服务器进行校验并存储。但是这里如果传输用户名密码,就是从服务器传到PC客户端,然后PC客户端拿到后又原样不变地发送给服务器进行登录,这很明显逻辑奇怪并且流程冗余,会造成一定的服务器资源浪费;

那会是传输用户ID吗?在理解不传输用户名密码的第二个原因后,那么也很容易明白,显然也不能或者不会传输用户ID。PC客户端虽然可以使用服务器返回的用户ID进行用户信息状态查询、同步等操作,但是直接拿用户ID进行一个“登录操作”,相当于跳过了token机制,那么以后在PC端的登录状态就没有过时的说法了,用户ID是一直不变的,只要客户端保存着这个ID,就可已拿这个ID进行登录验证,这显然不合理也不安全的。因此,也不可能是传输用户的ID。

 

那到底是什么数据在进行交互呢?

答案是:一种仅用于扫码登录的临时token令牌数据

PC端在选择使用二维码登录的时候,服务器会生成一个二维码,并且这个二维码绑定着一个ID(二维码ID),当手机设备扫描二维码后,会解析二维码并拿到这个ID;然后当手机端点击确认登录后,手机端会带着这个ID,以及手机端上已经登录了的用户身份信息token,一起发送给服务器,服务器接收到后,新生成一个专门给PC端使用且绑定了用户身份的token,然后返回给PC端,这样PC端就相当于登录了,之后PC端的用户检验就是用这个token进行。当然,这里已经忽略了很多细节过程,下文会更加详细地流程描述。

其实这里,已经回答了第三个问题:如何保证扫码登录的过程是安全的,非信息暴露泄漏的?

在整个扫码登录过程中,手机端与PC端涉及的数据交互,仅仅是由服务器管理控制的一个二维码ID、手机端上的用户身份token(有时效性)、服务器新生成给PC端的用户身份token(有时效性),没有敏感信息交互,也就不存在敏感信息的泄漏;服务器给PC端生成一个新的token,从另一个角度上看,就跟用户输入用户名密码登录的本质是一样的,都是基于带时效性的token校验机制,只不过扫码登录的方式少了输入用户名密码这一个步骤。因此,这样的一个扫码登录流程是安全的。

 

最后一个问题,PC端是如何检测到二维码的状态的呢?

其实这里应该很容易就能想到了,无非两种:socket和轮询

 

socket方式:

PC端保持着与服务器的长连接,当手机端扫描二维码后,带着解析得到的二维码ID第一次发送给服务器,当服务器收到这个请求后,代表用户已经扫描了二维码,这时服务器就可以通过socket告知PC端二维码已被扫描,等待确认;之后手机端不论是取消登录还是确认登录,都会相应的请求服务器,服务器收到请求会根据相应的逻辑处理,进而通知PC端更新相应的状态,流程图如下:

 

轮询方式:

轮询方式即在PC端创建一个定时器,每隔一段时间请求服务器查询状态的更新情况,然后更新网页的显示信息。当时这个定时器得控制好启动时机和生命周期,因为PC端的二维码有可能一直没有被扫描,或者扫描之后没有下一步操作了,这时,如果没有控制好这个定时器,PC端就会一直地请求服务器查询,造成资源浪费和一定的性能损耗。

轮询的流程如下图所示:

 

至此,二维码扫码登录的分析我们已经基本了解了,接下来我们用时序图来描述二维码扫码登录的详细流程:

当然,这里还有一些其他细节处理没有在时序图中标注出来,比如说当用户不是点击确认而是点击了取消,那么服务器也要做相应的处理,如将所有临时数据清除,并告知PC端二维码状态。这种时候,PC端那边的二维码就已经无效了,此时如果要重新进行二维码登录,则要重新进行上述时序图的操作。

 

本文到这里就结束啦~欢迎各位读者伙伴们的点评和提供意见哦!

 

 


http://www.ppmy.cn/news/660340.html

相关文章

电脑通过二维码打开手机链接

自己写的一个电脑端打开手机二维码链接的程序。 小米自带浏览器有将网站弄成二维码的按钮,然后将这个二维码给电脑摄像头看一下,程序识别到是二维码,就通过浏览器打开这个链接。 import cv2 as cv from pyzbar.pyzbar import decode from re…

扫二维码自动跳转【java】

这个帖子网上很多了,但是都是讲理论知识,我呢,喜欢搞代码。既然搞完了,就贴出来备忘一下,也可以分享一下。 重复理论步骤: 1、进入网站-生成UUID 2、跳转到二维码页面(二维码包含UUID&#xf…

ctf,二维码与二进制

100个png,111.txt是提取的每个图片的二维码的数据,都是01的字符串。 python脚本或者工具都行。我用的二维码批量扫描工具1.1 。 左右拉一拉,缩放能看到二维码,用fastone capture滚动截图然后调整颜色,亮度拉倒最低&a…

扫描二维码后可以自动跳转到网页

现在我们的生活中随处可见二维码的身影,扫码付款,扫描进入小程序,扫码关注等等。二维码可以存储各种信息,主要包括网址、名片、文本信息、特定代码等。今天跟大家分享使用条码软件生成二维码,扫描后可以跳转到网址链接…

文件二维码:在线直接扫一扫二维码查看下载资料

手机与手机,手机与电脑,电脑与电脑之间,传输数据一般都比较麻烦。比方说手机与手机传输虽然可以用蓝牙,但是传输速度会很慢。手机与电脑通过有线连接方式可以进行文件传输,虽然速度比较快,但每次都要通过线…

生成二维码并将二维码附到pdf文件上,扫描二维码完成跳转

依托e-iceblue工具完成 官网:https://www.e-iceblue.cn/tutorials.html 本文参考:https://www.e-iceblue.cn/pdf_java_barcode/add-qrcode-in-pdf-using-java.html 注意:e-iceblue分为收费版本以及免费版本,(jar包版…

力扣、每日一练:爬楼梯

文章目录 一、题目二、解题思路:三、考察的知识点:四、使用Python语言巧妙实现:五、总结一下收获: 一、题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&am…

python 实现选择excel相关区域插入到word文件中

from openpyxl import load_workbook from docx import Document# 加载Excel文件和Word文件 excel_file rC:\Users\Thinkpad\Desktop\资料整编2023110--V6.xlsx word_file rC:\Users\Thinkpad\Desktop\1.docx# 打开Excel文件并选择要插入的区域 wb load_workbook(excel_file…