微信扫码登录是如何实现的?

article/2025/9/13 2:39:02

网页版微信刚推出时,无数人被它的登录方式惊艳了一下,不需要输入用户名密码,打开手机微信扫一扫,便自动登录。从原理上讲,二维码只能是一段文本的编码,如何用它实现快捷登录的呢?

打开网页版微信,可以看到如下的页面:

微信扫码界面

如果你用我查查、支付宝、新浪微博等软件扫码二维码,你会发现此二维码解析出来是如下的网址:

https://login.weixin.qq.com/l/obsbQ-Dzag==

接下来详细介绍一下扫码登录具体的每个步骤:

扫码登录完整流程

①:用户 A 访问微信网页版,微信服务器为这个会话生成一个全局唯一的 ID,上面的 URL 中 obsbQ-Dzag== 就是这个 ID,此时系统并不知道访问者是谁。

②:用户A打开自己的手机微信并扫描这个二维码,并提示用户是否确认登录。

③:手机上的微信是登录状态,用户点击确认登录后,手机上的微信客户端将微信账号和这个扫描得到的 ID 一起提交到服务器

④:服务器将这个 ID 和用户 A 的微信号绑定在一起,并通知网页版微信,这个 ID 对应的微信号为用户 A,网页版微信加载用户 A 的微信信息,至此,扫码登录全部流程完成

扫码登录看起来神奇,主要是因为微信 APP 扫自家的码会做一些普通二维码软件不会做的额外的操作,那就是将当前已登录的微信和扫出来的 ID 提交到微信服务器,类似的应用还有扫码支付、扫码加公众号等功能。

扫码登录原理

扫码登录大概的思路是:微信手机客户端从网页二维码里面得到一些信息,然后发送给网页微信的服务器,网页服务器验证信息并响应。下面,我们借助火狐浏览器提供的Firebug工具看看,到底是怎么一回事儿吧!

1.每次打开微信网页版的时候,都会生成一个含有唯一uid的二维码,而且每次刷新后都会改变。这样可以保证一个uid只可以绑定一个账号和密码,确定登录用户的唯一性。可以通过手机上的UC浏览器提供的扫码功能查看二维码里面的信息,但并不会自动打开该地址。

我刷新三次,扫描结果如下,其中最后面那串数字就是uid:

1) https://login.weixin.qq.com/l/48e24d66bdbc4f 2) https://login.weixin.qq.com/l/0787fb4fa7ad4c 3) https://login.weixin.qq.com/l/92781a4a7f1c47

通过查看网页源码,这个页面在加载完毕时,已经把很多登录后才需要的相关资源都预先加载进来了,所以登录用户得到确认后展示用户信息的速度很快。

2.除了返回唯一的uid,实际上打开这个页面的时候,浏览器跟服务器还创建了一个长连接,请求uid的扫描记录。如果没有,在特定时长后(目前是27秒左右)会接到状态码408(请求超时),表示应该继续下一次请求;如果接到状态码201(服务器创建新资源成功),表示客户端扫描了该二维码。

请求超时:返回408

扫码成功:返回201

长轮询代码结构:

3.当用户使用登录后的微信扫描二维码的时候,会将uid和手机微信产生的token进行绑定,并上传到服务器。这个时候,浏览器通过长轮询查询到uid扫描记录,立即得到201响应码,然后通知服务器,客户端由此也进入一个新的页面(就是那个要你点确认的按钮)。在客户端点击确认后,获得服务器授信的令牌,进行随后的信息交互过程。

结语

总的来说,微信扫码登录核心过程应该是这样的:浏览器获得一个唯一的、临时的uid,通过长连接等待客户端扫描带有此uid的二维码后,从长连接中获得客户端上报给服务器的帐号信息进行展示。并在客户端点击确认后,获得服务器授信的令牌,进行随后的信息交互过程。 在超时、网络断开、其他设备上登录后,此前获得的令牌或丢失、或失效,对授权过程形成有效的安全防护。

整理参考

www.jianshu.com/p/7f072ac61763 justcoding.iteye.com/blog/2213661

推荐去我的博客:

1.Java JVM、集合、多线程、新特性系列教程

2.Spring MVC、Spring Boot、Spring Cloud 系列教程

3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程

4.Java、后端、架构、阿里巴巴等大厂最新面试题

觉得不错,别忘了点赞+转发哦!

最后,关注下面的栈长的微信公众号:Java技术栈,回复:福利,可以免费获取一份我整理的 2020 最新 Java 面试题,真的非常全(含答案),无任何套路。


http://chatgpt.dhexx.cn/article/DyhYWxYA.shtml

相关文章

Python 最强 IDE 详细使用指南!

本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载 选自RealPython,作者:Jahongir Rahmonov 机器之心编译,参与:魔王 PyCharm 是一种 Python IDE,可以帮…

用 Python 给全球女神颜值排个序

点击上方“码农突围”,马上关注,每天上午8:50准时推送 这里是码农充电第一站,回复“666”,获取一份专属大礼包 真爱,请设置“星标”或点个“在看” 作者 | 数据森麟 来源 | 数据森麟(ID: shujusenlin&#…

官宣:Python 3.8正式发布!来看看有哪些新功能

点击上方“码农突围”,马上关注,每天上午8:50准时推送 这里是码农充电第一站,回复“666”,获取一份专属大礼包 真爱,请设置“星标”或点个“在看” 来源:.python.org 编辑:肖琴,转自…

人工智能可以产生自主意识吗?

作者:人民邮电出版社 链接:https://www.zhihu.com/question/372639666/answer/1343242547 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 「既然人类对自己存在的认知来源于“感知”和“记忆…

CET6 历年真题原词复现 核心词汇 做题技巧 听力拿分技巧汇总(这篇文章是英语四六级考试最后的版本,谢谢大家一路陪伴)

话不多说直接进入 这次是最后一次 也是最用心的一次关于CET6的整理,CET4很简单,我认为没有必要去整理或者帮助各位同学,cet4只是cet6的前置任务罢了,但要是你说你考完cet4就收手了,不考了,不考6级了。我只…

这一款神器,助你秒级定位线上问题!

点击上方“Github中文社区”,关注 触达Github项目来源:https://my.oschina.net/leejun2005/blog/1524687 背景 经常做后端服务开发的同学,或多或少都遇到过 CPU 负载特别高的问题。 尤其是在周末或大半夜,突然群里有人反馈线上机器…

前端工程师高手说说CSS学习中的瓶颈

一、何为瓶颈? “瓶颈”指瓶子的颈部,相对狭窄。这是很传神的一个词,因为狭窄,因此难以突破;但是,一旦突破了,就是广阔天空(偌大瓶身)! 小弟不才&#xff0…

线上服务 CPU 100%?一键定位 so easy!

转自:大数据之路, 链接:my.oschina.net/leejun2005/blog/1524687 背景 经常做后端服务开发的同学,或多或少都遇到过 CPU 负载特别高的问题。 尤其是在周末或大半夜,突然群里有人反馈线上机器负载特别高,不熟…

线上服务 CPU 100% ?一键定位 so easy!

来源:my.oschina.net/leejun2005/blog/1524687 背景 经常做后端服务开发的同学,或多或少都遇到过 CPU 负载特别高的问题。 尤其是在周末或大半夜,突然群里有人反馈线上机器负载特别高,不熟悉定位流程和思路的同学可能登上服务器一…

牛逼的故障诊断工具!秒级定位线上问题

背景 经常做后端服务维护或开发的同学,或多或少都遇到过CPU 负载特别高的问题。尤其是在周末或大半夜(有没有同感,平时不出问题,一到休息或下班时间频繁出故障,有的文末点个在看示意一下),突然群…

推荐一款神器,助你秒级定位线上问题!

来源:my.oschina.net/leejun2005/blog/1524687 背景 经常做后端服务开发的同学,或多或少都遇到过 CPU 负载特别高的问题。 尤其是在周末或大半夜,突然群里有人反馈线上机器负载特别高,不熟悉定位流程和思路的同学可能登上服务器一…

最牛逼的故障诊断工具!秒级定位线上问题

点击下方公众号「关注」和「星标」 回复“1024”获取独家整理的学习资料! 背景 经常做后端服务维护或开发的同学,或多或少都遇到过CPU 负载特别高的问题。尤其是在周末或大半夜(有没有同感,平时不出问题,一到休息或下班…

WheelView地区选择三级联动详解

1. 效果 最近需要做一个地区选择的功能,但是在网上和github上找了很久都没找到满意的,然后朋友推荐了一个给我,我花了点时间把代码大致看懂并改成我想要的,并写上我的理解。效果如图: 2. 注意 a. 首先我们要明白…

如何用美剧真正提升你的英语水平————转自厦大口译的博客

看到很多童鞋讨论有关美剧学习英语到底有没有用,以及用哪部美剧练习,我在这里想说这只是一个参考,世界上没有绝对的事情,究竟有没有用看个人 1. 不是所有的美剧都适合学英语 如果喜欢看如《24小时》这样的动作片, 那你基本会讲一口…

美剧命名规则

缘起 最近工作需要研究了下ffmpeg这个工具.在查资料的时候意外发现美剧制作组发布的美剧的名字是有规则的. 美剧命名规则 剧名.S季数E集数.集名(可以不标).发布年代(可以不标).分辨率(可以不标).信号采集源.音频编码(默认的MP3可以不标).视频编码-制作组 下面举例子说一下吧. 例…

EOS 智能合约

1. EOS智能合约的介绍 1.1. 所需背景知识 C / C 经验 基于EOS.IO的区块链使用Web Assembly(WASM)执行开发者提供的应用代码。WASM是一个已崭露头角的web标准,受到Google, Microsoft, Apple及其他大公司的广泛支持。目前为止,最成熟的用于构建应用及WA…

EOS智能合约开发(三)EOS创建和管理账户

创建好钱包和密钥后,我们就需要创建账户。为什么创建账户,为了方便人与区块链交互。以太坊40位地址,让我们非常难以记忆。EOS有账户概念,我们就可以定义账户权限。 在区块链上执行操作,需要使用到账号。我们使用cleos…

固化EOS智能合约,监管升级权限,净化EOS DAPP生态

最近EOS版的Fomo 3D狼人杀游戏骗局引发了大家对EOS智能合约的安全性的大讨论。 和以太坊智能合约的不可升级不同,EOS智能合约可升级,因而保存在智能合约中的数据称不上去中心化,因为智能合约的管理员可偷偷的升级智能合约来修改合约里的任何数…

[EOS源码分析]7.EOS智能合约开发实践之合约调用合约(inline action)

首先,目前dawn-4.1, dawn-4.2使用inline action是会报如下错误 transaction declares authority {"actor":"hello.code","permission":"active"}, but does not have signatures for it under a provided delay of 0 ms 这…

区块链实现智能合约

区块链实现智能合约 一、制定生成智能合约 1、首先参与智能合约的用户必须先注册成为区块链的用户,区块链返回给用户一对公钥和私钥。公钥做为用户在区块链上的账户地址,私钥做为操作该账户的唯一钥匙。 2、两个以两个以上的用户根据需要,…