扫码登录流程

扫码登录

场景

在网页版qq邮箱,微信登录账号等时候,无需输入账号和密码,只需要在手机上扫码即可完成登录

登录分析

扫码登录涉及3种角色: PC端, 手机端, 服务端

涉及围绕这三端进行,每一端完成应该完成什么功能,应该怎么实现,端与端如何交互

两个问题

  • 手机端如何认证
  • pc端如何完成登录

普通登录流程:

PC端输入账号密码完成认证,然后服务器给PC同步返回token key标志, PC再次请求服务端,需要携带token key,用于标志和证明自己已登录

服务端响应时,对token key进行校验,通过则正常响应;校验不通过则失败; token过期则需要再次登录认证,获取新的token key

现在扫码登录:

  • 不是通过账号密码,而是由手机端扫码完成
  • PC端没法同步获取认证成功后的凭据, 必须用某种方法来让PC获取凭据

扫码登录实现

手机端如何完成认证

二维码如何生成

二维码可以存储任何字符串,扫码就是从图像中获取字符串包含的数据

生成流程

pc端请求服务端,服务端返回数据,PC端显示这些数据

数据包含什么

二维码是重要的媒介,服务端必须给这个数据生成唯一的标志作为二维码ID,同时设置过期时间。PC端根据二维码ID数据显示二维码

同时服务端应该保存二维码状态: 未扫描, 已成功, 已失效

APP认证机制

首先, APP不存储登录密码,只有第一次登录二维码基于账号密码,重启手机也不需要重新登录

设备id, device_id,每台设备都是惟一的,imei码

  • APP登录除了账号密码,还有设备信息
  • 账号密码校验通过,服务端会把账号和设备进行绑定,进行持久化保存,包含了账号ID,设备ID,设备类型等
  • APP每次请求除了携带token key。还需要携带设备信息

因为移动端设备唯一性,可以为每个客户端生成专属token,token不需要过期,这就是可以一次登录,长久使用的原理

手机扫码做了什么

两件事:

  • 扫码: 识别二维码,获取唯一二维码ID
  • 确认登录: 手机端通过**带认证信息(token 设备信息)、二维码信息(二维码ID)**请求服务端,完成认证过程,确认PC端登录

PC端如何完成登录(重点)

手机端完成确认后,服务器就应该发送token给PC端完成登录

PC端如何获取token?

PC端可以通过获取二维码的状态来进行相应的响应:

  • 二维码 未扫描:无操作
  • 二维码 已失效:提示刷新二维码
  • 二维码 已成功:从服务端获取PC token

获取二维码状态有三种方式

轮询

PC端每隔一段时间主动给服务端发送一次二维码状态的查询请求
在这里插入图片描述

长轮询

长轮询是指客户端主动给服务端发送二维码状态的查询请求,服务端按情况对请求进行阻塞(hold住请求不关闭),直至二维码信息更新或者超时。当客户端接收到返回结果后,若二维码仍未被烧卖,则继续发送查询请求,直到状态改变(已失效或已成功)

websocket

Websocket是指在前端生成二维码后,会与后端建立连接,一旦后端发现二维码变化,直接通过建立的ws连接主动推送信息给前端

PS: 建议使用轮询,微信,淘宝登录都用轮询

短轮询简单无状态,支持水平扩容(加机器)实现高并发

维持大量websocket可能导致攻击,不适合扩容

长连接负载和消耗较大

总结:

在这里插入图片描述

整体流程如上图,以轮询为例:

  1. 访问PC端二维码生成页面,PC端请求服务端获取唯一二维码ID
  2. 服务端生成相应的二维码ID,设置二维码过期时间状态等
  3. PC获取二维码ID,生成相应二维码
  4. 手机端扫描二维码,获取二维码ID
  5. 手机端确认登录,将手机端token和二维码ID发送给服务端
  6. 服务端校验手机端token,根据手机端token和二维码ID生成PC端token
  7. PC端通过轮询方式请求服务器,通过二维码ID获取二维码状态,如果成功,返回 PC token, 登录成功

参考原文:https://juejin.cn/post/7021515145335554079

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/645024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第四十二天|01背包问题、01背包问题(滚动数组)、416. 分割等和子集

题目&#xff1a;01背包问题 文章链接&#xff1a;代码随想录 视频链接&#xff1a;LeetCode:背包问题 题目链接&#xff1a;卡码题目链接 图释&#xff1a; //二维dp数组实现 #include <bits/stdc.h> using namespace std;int n, bagweight;// bagweight代表行李箱空…

打 jar 包运行 在windows 平台控制台和日志 乱码解决

--拒絕鷄巴囉嗦&#xff0c;直接解決問題 我们在Windows下运行jar包时&#xff0c;常常会出现乱码&#xff0c;主要分为dos窗口输出的日志中出现乱码和程序返回数据出现乱码。 dos窗口输出的日志中出现乱码 执行如下命令&#xff0c;将控制台输出编码改为UTF8&#xff1a; ch…

Python接口自动化测试实战

接口自动化测试是指通过编写程序来模拟用户的行为&#xff0c;对接口进行自动化测试。Python是一种流行的编程语言&#xff0c;它在接口自动化测试中得到了广泛应用。下面详细介绍Python接口自动化测试实战。 1、接口自动化测试框架 在Python接口自动化测试中&#xff0c;我们…

四、Flask学习之JavaScript

四、Flask学习之JavaScript JavaScript&#xff0c;作为一种前端脚本语言&#xff0c;赋予网页生动的交互性和动态性。通过它&#xff0c;开发者能够操作DOM&#xff08;文档对象模型&#xff09;实现页面元素的动态改变、响应用户事件&#xff0c;并借助AJAX技术实现异步数据…

山西电力市场日前价格预测【2024-01-25】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-01-25&#xff09;山西电力市场全天平均日前电价为274.83元/MWh。其中&#xff0c;最高日前电价为562.65元/MWh&#xff0c;预计出现在18:15。最低日前电价为0.00元/MWh&#xff0c;预计出…

《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第 2章感知机

文章目录 第 2章感知机2.1 感知机模型2.2 感知机学习策略2.2.1 数据集的线性可分性2.2.2 感知机学习策略 2.3 感知机学习算法2.3.1 感知机学习算法的原始形式2.3.2 算法的收敛性2.3.3 感知机学习算法的对偶形式 实践&#xff1a;二分类模型&#xff08;iris数据集&#xff09;数…

vue3-深入组件-组件注册和props更多细节

组件注册 定义好的组件需要注册才能被使用。 注册方式有两种 全局注册 局部注册 全局注册 .component() 方法&#xff0c;让组件在当前 Vue 应用中全局可用。 在 main.ts 中 import ./assets/main.cssimport { createApp } from vue import { createPinia } from pinia i…

Nodejs前端学习Day1

妈的&#xff0c;学vue3需要15.0以上的nodejs 文章目录 前言一、学习目标二、学习目录三、为什么JavaScript可以在浏览器中被执行四、为什么JavaScript可以操作DOM和BOM五、浏览器中的JavaScript运行环境总结 前言 妈的&#xff0c;学vue3需要15.0以上的nodejs 一、学习目标 二…

递归和尾递归(用C语言解斐波那契和阶乘问题)

很多人都对递归有了解&#xff0c;但是为尾递归很少&#xff0c;所以这次来专门讲一讲关于尾递归的一些问题。 什么是尾递归 如果一个函数中所有递归形式的调用都出现在函数的末尾&#xff0c;我们称这个递归函数是尾递归的。因为在一些题目的做法中&#xff0c;我们可以发现…

解决 Git:ssh: connect to host github.com port 22: Connection timed out 问题的三种方案

1、问题描述&#xff1a; 其一、整体提示为&#xff1a; ssh: connect to host github.com port 22: Connection timed out fatal: Could not read from remote repository. 中文为&#xff1a; ssh&#xff1a;连接到主机 github.com 端口 22&#xff1a;连接超时 fatal&a…

linux服务器ssh连接慢问题处理

一、 可能导致慢的几个原因 1、网络问题&#xff1a;网络延迟、带宽限制和包丢失等网络问题都有可能导致SSH连接变慢。 2、客户端设置&#xff1a;错误的客户端设置&#xff0c;如使用过高的加密算法或不适当的密钥设置&#xff0c;可能导致SSH连接变慢。 3、服务器负载过高…

使用docker容器 将node应用程序打包成镜像

可以使得node服务应用程序可以通过流水线部署 安装docker 1、注意 我的服务器的系统是 centos7&#xff0c;所以这里写的是在centos7上按照的docker 注意&#xff1a;Docker 要求 CentOS 系统的内容版本高于3.10 uname -r打印&#xff1a;3.10.0-1160.105.1.el7.x86_64 //确定…

leetcode刷题(剑指offer) 240.搜索二维矩阵Ⅱ

240.搜索二维矩阵Ⅱ 编写一个高效的算法来搜索 *m* x *n* 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,…

27.移除元素(力扣LeetCode)

文章目录 27.移除元素&#xff08;力扣LeetCode&#xff09;题目描述方法一&#xff1a;vector成员函数&#xff1a;erase方法二&#xff1a;暴力解法方法三&#xff1a;双指针法 27.移除元素&#xff08;力扣LeetCode&#xff09; 题目描述 给你一个数组 nums 和一个值 val&…

[每日一题] 01.24 - 求三角形

求三角形 n int(input()) count1 (1 n) * n // 2 count2 n * n lis1 [str(i).zfill(2) for i in range(1,count1 1)] lis2 [str(i).zfill(2) for i in range(1,count2 1)]for i in range(0,len(lis2),n):print(.join(lis2[i:i n]))print()for i in range(1,n 1):tem…

代码中遇到的问题

编译器错误消息&#xff1a; CS1061&#xff1a; default_aspx 不包含 GridView1_SelectedIndexChanged 的定义&#xff0c;并且找不到接受类型为default_aspx的第一个参数的可访问扩展方法GridView1_SelectedIndexChanged&#xff08;是否缺少 using 指令或程序集引用&#xf…

[笔记]Spring AOP

Spring AOP&#xff08;Aspect Oriented Programming&#xff09; AOP将应用程序分为核心业务和非核心的公共功能&#xff0c;AOP的关注点是系统中的非核心的公共功能&#xff1b; AOP可以通过预编译或者运行期动态代理的方式&#xff0c;为横跨多个对象&#xff08;没有继承关…

UCAS-AOD遥感旋转目标检测数据集——基于YOLOv8obb,map50已达96.7%

1.UCAS-AOD简介 1.1数据说明 遥感图像&#xff0c;又名高分辨率遥感图像。遥感图像的分类依据是根据成像的介质不同来进行分类的。UCAS-AOD (Zhu et al.&#xff0c;2015)用于飞机和汽车的检测&#xff0c;包含飞机与汽车2类样本以及一定数量的反例样本&#xff08;背景&…

【立创EDA-PCB设计基础】6.布线铺铜实战及细节详解

前言&#xff1a;本文进行布线铺铜实战及详解布线铺铜的细节 在本专栏中【立创EDA-PCB设计基础】前面完成了布线铺铜前的设计规则的设置&#xff0c;接下来进行布线 布局原则是模块化布局&#xff08;优先布局好确定位置的器件&#xff0c;例如排针、接口、主控芯片&#xff…

k8s-基础知识(Pod,Deployment,ReplicaSet)

k8s职责 自动化容器部署和复制随时扩展或收缩容器容器分组group&#xff0c;并且提供容器间的负载均衡实时监控&#xff0c;即时故障发现&#xff0c;自动替换 k8s概念及架构 pod pod是容器的容器&#xff0c;可以包含多个container pod是k8s最小可部署单元&#xff0c;容器…