乐趣区

关于后端:一文吃透扫码登录原理

本文曾经收录到 Github 仓库,该仓库蕴含 计算机根底、Java 根底、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享 等外围知识点,欢送 star~

Github 地址:https://github.com/Tyson0314/Java-learning


明天给大家介绍下扫码登录性能是怎么设计的。

扫码登录性能次要分为三个阶段:待扫描、已扫描待确认、已确认

整体流程图如图。

上面分阶段来看看设计原理。

1、待扫描阶段

首先是待扫描阶段,这个阶段是 PC 端跟服务端的交互过程。

每次用户关上 PC 端登陆申请,零碎返回一个 惟一的二维码 ID,并将二维码 ID 的信息绘制成二维码返回给用户。

这里的二维码 ID 肯定是惟一的,后续流程会将二维码 ID 跟身份信息绑定,不惟一的话就会造成你登陆了其余用户的账号或者其余用户登陆你的账号。

此时在 PC 端会启动一个定时器,轮询查问二维码是否被扫描

如果挪动端未扫描的话,那么一段时间后二维码将会生效。

这个阶段的交互过程如下图所示。

2、已扫描待确认阶段

第二个阶段是已扫描待确认阶段,次要是挪动端跟服务端交互的过程。

首先挪动端扫描二维码,获取二维码 ID,而后 将手机端登录的凭证(token)和 二维码 ID 作为参数发送给服务端

此时的手机在之前曾经是登录的,不存在没登录的状况。

服务端承受申请后,会将 token 与二维码 ID 关联,而后会生成一个长期 token,这个 token 会返回给挪动端,长期 token 用作确认登录的凭证。

PC 端的定时器,会轮询到二维码的状态曾经发生变化,会将 PC 端的二维码更新为已扫描,请在手机端确认。

这里为什么要有手机端确认的操作?

假如没有确认这个环节,很容易就会被好人拦挡 token 去假冒登录。所以二维码扫描肯定要有这个确认的页面,让用户去确认是否进行登录。

另外,二维码扫描确认之后,再往用户 app 或手机等发送登录揭示的告诉,告知如果不是自己登录的,则倡议用户立刻批改明码。

这个阶段是交互过程如下图所示。

3、已确认

扫码登录的最初阶段,用户点击确认登录,挪动端携带上一步骤中获取的长期 token 拜访服务端。

服务端校对实现后,会更新二维码状态,并且给 PC 端生成一个正式的 token。

后续 PC 端就是持有这个 token 拜访服务端。

这个阶段是交互过程如下图所示。

以上就是整个扫码登录性能的具体设计!


最初给大家分享一个 Github 仓库,下面有大彬整顿的 300 多本经典的计算机书籍 PDF,包含 C 语言、C++、Java、Python、前端、数据库、操作系统、计算机网络、数据结构和算法、机器学习、编程人生 等,能够 star 一下,下次找书间接在下面搜寻,仓库继续更新中~

Github 地址:https://github.com/Tyson0314/java-books

退出移动版