事情经过

这天中午,小A吃完午饭,摊在自己的躺椅上,想趁吃饱喝足的午后时间静静享受独自的静谧。

干点什么好呢?小A单手操作鼠标打开了一个陌生而隐秘的网站。正开着某个视频起劲,突然浏览器弹出了一个对话框:

请使用微信扫码登录账号,继续观看

这...

但是由于强烈的好奇驱使,迫于无奈,小A只好选择登录再继续观看。只见他熟练的掏出手机,打开微信扫一扫对准上面的二维码,只听见 “叮” 的一声,网页上的二维码放佛活过来了,直接刷新出了小A的微信头像,同时手机上也弹出登录的提醒。

小A心中略微惊叹,但没来得及多想。忙点击手机界面中登录按钮。此时网页刷新,恢复了正常,表示可以继续观看。

上网冲浪的时间总是过得很快,小A很快就有些疲倦。他闭上眼睛,脑海中却浮现出了刚刚微信扫描二维码,然后登录网页的场景,心中再次惊叹,并开始思考起其中的原理来。

原理解析

微信扫码登录现在在日常生活中已经是常见不能再常见的场景之一了,但是要知道微信首次公开这项功能时,却是惊艳众人。移动端与PC端以这样一种巧妙的方式链接在了一起,的确是让人惊叹。

小A想起来之前听过的前后端的概念,知道账户的数据信息一般都是放在服务器上,前端负责向后端 “讨要数据” 并显示,后端则是对前端的 “讨要” 做出反应。这样一来,小A猜测微信登录的过程可能就是:

  1. 网页前端向微信后台请求账号数据

  2. 微信后台接受网页前端的请求,然后将他的账号数据返回

  3. 网页前端接收到了数据后,在浏览器里进行显示

还手脚麻利的画了个示意图:

当小A正准备沾沾自喜的时候,突然看到桌面上的手机。咦,如果就只是这么个过程,那手机的作用是啥。他才开始意识到,问题没这么简单。

于是,他决定重新探秘微信扫码登录的过程。

过程分析

小A打开了一个十分简洁的网站,说是微信的网页版,可以微信直接扫码登录。

https://wx.qq.com/

小A看着网页中硕大的二维码陷入了沉思,他在想这个二维码跟他的身份有没有关系呢。如果没有,那它又是怎么生成的呢。

思考间,小A打开了浏览器的开发者工具。在网络监控一览找到了这幅二维码,与之对应的链接是

https://login.weixin.qq.com/qrcode/4fhrH4fhTQ==

然后习惯性地,小A尝试多次刷新页面,发现二维码不断发生变化,链接也不断更改。

https://login.weixin.qq.com/qrcode/YdDa9LAqpA==

https://login.weixin.qq.com/qrcode/ofw5oAsMVg==

https://login.weixin.qq.com/qrcode/gaNS_fxO_w==

他似乎发现了些东西。二维码不断变化,其对应的链接尾的代码也相应变化,并且是随机性的变化。

这也就是说,每一次页面刷新都会随机且唯一地生成一个二维码这或许可以与手机登录的过程联系起来。

小A似乎开始明白了,他随即再次拿起手机,熟练的使用微信扫描了此时的二维码。

“叮” 的一声,网页上的二维码顿时变成了小A帅气的微信头像。这个时候,小A才突然意识到,是扫码之后网页才与他的微信账号建立起了联系。

没有扫码之前,页面上的二维码只是随机生成的且与用户无关的码;而当用户扫码之后,二维码便与用户帐号绑定在了一起。

原来手机扫码的用处是这样!

小A此时注意到,手机微信上弹出了『微信登录确认』的提醒。小A这个时候谨慎地点击了下方的登录按钮。

随着平滑的动画一闪而过,网页上已经显示出了小A的账号信息,显然小A的微信账号已经登录。再一次体验这个过程,小A心中开始思索手机微信在登录过程中所起到的具体作用。

首先需要明白几个过程:

  1. 进入网页登陆界面,随机生成一个二维码;

  2. 小A通过手机扫描二维码,将微信账号与二维码绑定;

  3. 小A在手机微信点击登录按钮,授权网页登录微信账号;

  4. 网页获得小A的账号信息,将数据显示。

原理解释

小A望着上述过程,结合最开始的原理猜测,开始思索整个环节哪里出了差错。

网页的二维码到底从何而来?

是谁向微信后台请求了账号数据?

突然,他意识到,不同的网站可能都需要通过微信后台进行数据的获取,那么每一个网站必然也存在它的后台来给微信后台发送请求。

这样一来,整个过程就能解释得通了!

  1. 网站页面刷新,网页后台向微信后台请求授权登录;

  2. 微信后台返回登录所需二维码;

  3. 用户通过手机扫描二维码,并在手机上授权登录后,微信后台告知网页后台已授权;

  4. 网页后台向微信后台请求微信账号数据;

  5. 微信后台返回账号数据;

  6. 网页后台接收数据并通过浏览器显示;

技术剖析

小A在想清楚了整个过程后,决定对整个过程的技术实现进行进一步的探究。他打开了微信开发官方文档,找到了第三方网站应用微信登录开发指南:

https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html

他将整个过程梳理了一遍,画出了这个图:

技术实现如下:

一、二维码的获得

  1. 用户打开网站后,网站后台根据微信OAuth2.0协议向微信开发平台请求授权登录,并传递事先在微信开发平台中审核通过的AppIDAppSecrect等参数;

  2. 微信开发平台对AppID等参数进行验证,并向网站后台返回二维码;

  3. 网站后台将二维码传送至网站前端进行显示;

二、微信客户端授权登录

  1. 用户使用微信客户端扫描二维码并授权登录;

  2. 微信客户端将二维码特定的uid与微信账号绑定,传送至微信开发平台;

  3. 微信开发平台验证绑定数据,调用网站后台的回调接口,发送授权临时票据code

三、网站后台请求数据

  1. 网站后台接收到code,表明微信开发平台同意数据请求;

  2. 网站后台根据code参数,再加上AppIDAppSecret请求微信开发平台换取access_token

  3. 微信开发平台验证参数,并返回access_token

  4. 网站后台收到access_token后即可进行参数分析获得用户账号数据。

在上述过程中,有几个参数值得解释一下:(来源官方文档)

AppID:应用唯一标识,在微信开放平台提交应用审核通过后获得

AppSecret:应用密钥,在微信开放平台提交应用审核通过后获得

code:授权临时票据,第三方通过code进行获取access_token的时候需要用到,code的超时时间为10分钟,一个code只能成功换取一次access_token即失效。code的临时性和一次性保障了微信授权登录的安全性。

整个过程从网站后台向微信开发平台请求授权登录开始,最终目的是为了获得access_token

access_token:用户授权第三方应用发起接口调用的凭证

在获得了access_token后就可以解析用户的一些基本信息,包括头像、用户名、性别、城市等。这样一来,整个微信扫描登录的过程就完成了。

研究到这,小A终于大体上对微信扫码登录的整个过程有了清晰的认知。看起来似乎也不难,开发者只需要在网页后端做好对微信公众平台的接口调用即可实现扫码登录。

伸了伸懒腰,小A又想到在整个过程中还需要考虑超时的问题。比如二维码超时未扫描、二维码扫描后超时授权、获得access_token后超时等等问题。

揉了揉太阳穴,小A发现一个简单的功能实现起来还是需要考虑许多细节,真的是纸上得来终觉浅呀。小A下定决心,下次得少上网冲浪了,花点时间搭个服务器先把微信扫码登录过程实现看看。

不过,还得先去在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的AppIDAppSecret才行。

想了想,还是先睡觉吧。

不过,先领取22套编程视频,再睡吧!!!

微信扫码登录的几秒钟里,到底发生了什么?相关推荐

  1. 微信扫码登录的几秒钟里,到底发生了什么

    一想到你要关注我 ↑ 就忍不住有点紧张0.0... 事情经过 这天中午,小A吃完午饭,摊在自己的躺椅上,想趁吃饱喝足的午后时间静静享受独自的静谧. 干点什么好呢?小A单手操作鼠标打开了一个陌生而隐秘的 ...

  2. 微信扫码登录的几秒钟里,到底发生了什么(扫码登录原理)

    事情经过 这天中午,小A吃完午饭,摊在自己的躺椅上,想趁吃饱喝足的午后时间静静享受独自的静谧. 干点什么好呢?小A单手操作鼠标打开了一个陌生而隐秘的网站.正开着某个视频起劲,突然浏览器弹出了一个对话框 ...

  3. SpringBoot整合微信扫码登录

    SpringBoot整合微信扫码登录 准备工作 基本思路流程 搭建SpringBoot 引入依赖 加入配置文件 代码实现 工具类 controller层 结果 准备工作 1.登录官网了解到,学习者想本 ...

  4. 微信官方你真的懂OAuth2?Spring Security OAuth2整合企业微信扫码登录

    ❝ 企业微信扫码登录DEMO参见文末. 现在很多企业都接入了企业微信,作为私域社群工具,企业微信开放了很多API,可以打通很多自有的应用.既然是应用,那肯定需要做登录.正好企业微信提供了企业微信扫码授 ...

  5. 【vue+pc端】实现微信扫码登录pc端,后端通过微信开发平台,前端生成二维码(仅供参考)

    这两周的需求是通过微信扫码登录pc端,刚定下需求原型图还没出来前,后端特意发了微信开发平台的链接给我,关于如何生成二维码的文档,以及扫码跳转后如何传code给他. 请戳这里准备工作|微信开放文档 我最 ...

  6. 基于Springboot2.x+vue3.x整合实现微信扫码登录

    第1章 准备工作 1.1 微信开放平台 微信扫码登录,需要在微信开放平台注册账号被认证为开发者才能接入官网地址:https://open.weixin.qq.com/ 1.1.1 注册账号并认证成为开 ...

  7. 前端PC端微信扫码登录

    PC端微信扫码登录 一.微信开放平台 1.创建网站应用 2.设置回调域名 二.代码 1.在index.html页面引入http://res.wx.qq.com/connect/zh_CN/htmled ...

  8. 微信扫码登录很难吗?5步帮你搞定

    点击关注公众号,利用碎片时间学习 微信开放平台:微信扫码登录功能 官方文档:https://developers.weixin.qq.com/doc/oplatform/Website_App/WeC ...

  9. 个人开发者实现微信扫码登录

    使用码上登录中转微信扫码登录 使用之前最好有一个公网服务器,能够公网访问的 redis 和 mysql 数据库,并且能够部署公网访问的服务 码上登录是一个小程序,对个体开发者提供了免费的微信扫一扫登录 ...

最新文章

  1. 将XML转为HTML
  2. leetcode算法题--会议室★★
  3. java怎么注销cookie_java web中cookie的永久创建与撤销
  4. Android 一直往文件写数据_( 十 ) 小众但好用:通过 Google drive 备份与同步 Keepass 数据库...
  5. 使用汉化版srvinstw.exe安装/卸载Windows系统服务
  6. 技术交底书在专利申请文件撰写中的功用
  7. Ember项目引入js依赖
  8. 阅读,点亮盐城北大青鸟学子的学习生涯
  9. 几个有效防止服务器攻击的小妙招
  10. Leetcode有效数独的Python解法
  11. 无穷小进课堂,历史在召唤
  12. oracle 推进scn号
  13. 大海捞针 Skia(C++) 第 1 期:Skia 环境搭建
  14. adc0832工作原理详解_单片机ADC的工作原理
  15. python求最长公共子串_Python-求解两个字符串的最长公共子序列
  16. java无锁数据结构,无锁有序链表的实现
  17. 性化地图制作软件OpenOrienteering Mapper(附安装包)
  18. 从头开始训练一个检测QR二维码区域的YOLOv3模型
  19. 微信小程序view下的字体居中显示
  20. android端基于openCV给图片打马赛克

热门文章

  1. php中mysql查询条件为数组_请教php中数组做为mysql查询条件wherexxinarray,怎么处理...
  2. 23年找工作的心酸历程
  3. Java_day10-自我总结
  4. 松灵机器人二次开发之一
  5. Leetcode 828:独特字符串(超详细的解法!!!)
  6. C生万物 | 常量指针和指针常量的感性理解
  7. ui设计和平面设计区别:ui设计前景怎样
  8. 用DELPHI开发简繁体应用软件的技巧
  9. 10分钟拿下 HashMap
  10. C++:else/elseif使用