扫码登录操作过程

  • 浏览器输入:https://wx.qq.com/?lang=zh_CN
  • 手机登录微信,利用“扫一扫”功能扫描网页上的二维码
  • 手机扫描成功后,提示“登录网页版微信”;网页上显示“成功扫描 请在手机点击确认以登录”
  • 手机端点击“登录网页版微信”,网页跳转到用户的微信操作界面

整个扫码登录的操作过程还是挺简单的,而且交互地实时性比较好,如果网络不是非常阻塞,整个过程还是非常快的。

扫码登录原理

扫码登录大概的思路是:微信手机客户端从网页二维码里面得到一些信息,然后发送给网页微信的服务器,网页服务器验证信息并响应。下面,我们借助火狐浏览器提供的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

长轮询代码结构:

 1       function _poll(_asUUID) {
 2         // ....
 3         $.ajax({
 4           type: "GET",
 5           url: "https://login." + _sBaseHost + "/cgi-bin/mmwebwx-bin/login?uuid=" + _asUUID + "&tip=" + show_tip,
 6           dataType: "script",
 7           cache: false,
 8           timeout: _nAjaxTimeout,
 9           success: function(data, textStatus, jqXHR) {
10             switch (_aoWin.code) {
11             case 200:
12               // ....
13               break;
14             case 201:
15               // ....
16               break;
17             case 408:
18               // ....
19               break;
20             case 400:
21             case 500:
22               // ....
23               break;
24             }
25           },
26           error: function(jqXHR, textStatus, errorThrown) {
27               // ....
28           }
29         });
30       }啊啊啊啊啊啊啊啊

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

结语

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

参考

  • 微信扫描二维码登录网页是什么原理,前后两个事件是如何联系的?

源自:http://www.chenjunxyf.me/wei-xin-sao-miao-er-wei-ma-deng-lu-wang-ye-yuan-li/

justcode.ikeepstudying.com

转载于:https://www.cnblogs.com/bailiyi/p/5618381.html

(转)微信扫码登录网页实现原理相关推荐

  1. 微信扫码登录网页实现原理

    扫码登录操作过程 浏览器输入:https://wx.qq.com/?lang=zh_CN 手机登录微信,利用"扫一扫"功能扫描网页上的二维码 手机扫描成功后,提示"登录网 ...

  2. 微信扫码登录网页实现思路

    思路是:浏览器获取唯一的.临时的uid ,通过长链接等待客户端扫描带有次uid 的二维码后,从长链接中获取客户端上报给服务器的账号信息进行展示.并在客户端点击确认后,获得服务器授信的令牌,进行随后的信 ...

  3. SpringSecurity OAuth2实现单点登录,微信扫码登录,Redis缓存验证码---入门到实战

    1. 认证授权 1.1 什么是认证授权 ​ 例如课程发布后用户通过在线学习页面点播视频进行学习.如何去记录学生的学习过程呢?要想掌握学生的学习情况就需要知道用户的身份信息,记录哪个用户在什么时间学习什 ...

  4. IM要做手机扫码登录?先看看微信的扫码登录功能技术原理

    本文原文由作者Amazing10原创发布于公众号业余码农,收录时有改动,感谢原作者的技术分享. 1.引言 某天中午,吃完午饭,摊在自己的躺椅上,想趁吃饱喝足的午后时间静静享受独自的静谧. 干点什么好呢 ...

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

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

  6. 微信扫码登录实现原理

    二维码这把利刃,产品应该用到极致 微信扫码登录实现原理 转载于:https://www.cnblogs.com/gym333/p/7699885.html

  7. 微信开放平台开发——网页微信扫码登录(OAuth2.0)

    1.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提供 ...

  8. 微信|QQ扫码登录网页版二维码失效问题解决方案 网站无法访问PC网页版如何解决 安卓软件历史版本下载 FV fooview悬浮球帮助教程

    前言 1. 手机端浏览器登录网页的同时再用微信或者QQ扫码登录出现二维码失效问题如何解决? 2.部分网站无法访问PC网页版如何解决?请看方案 目录 前言 1.方案 2.方案 使用Edge安卓浏览器访问 ...

  9. vue实现网页端企业微信扫码登录功能(前端部分)

     时至今日,企业微信在企业日常工作中的使用越来越频繁也越来越重要,不少企业已使用企业微信进行着日常的工作安排管理.在这种背景下,各类系统和企业微信对接的需求也不断增加,今天要说的就是一个比较常见的需求 ...

最新文章

  1. ASP.NET获取IP的6种方法
  2. 常见的神经网络求导总结!
  3. datetime 索引_date类型和varchar类型在查询索引效率上比较
  4. matlab训练集测试集划分
  5. PyImport_ImportModule返回值=null
  6. 修理机器人基维斯_魔兽世界修理机器人沃尔特和移动邮箱怎么做
  7. mysql导出数据库报错,navicat 导入导出数据库报错的解决
  8. WebForm编辑器的相关资源
  9. pythontcp文件传输_python socket实现文件传输(防粘包)
  10. 在Blazor中构建数据库应用程序——第4部分——UI控件
  11. 顺骐名车汽车服务器中心,骐风k7电动汽车怎么样?骐风k7电动汽车介绍
  12. 谁是真凶?《CSI:犯罪现场调查》正帮助AI提高断案能力
  13. 每天Leetcode 刷题 初级算法篇-数学问题-Fizz Buzz
  14. html注册登录模板
  15. Layui 表单验证汇总
  16. Python Selenium的下载和安装
  17. 搭建安卓开发环境并测试运行安卓开发环境
  18. Tensor for argument #2 ‘mat1‘ is on CPU, but expected it to be on GPU (while checking arguments for
  19. ios系统越狱才可以享受的100项操作
  20. 线性可分支持向量机、线性支持向量机、非线性支持向量机的区别

热门文章

  1. 禅道程序员的10条原则--转载--为了不忘
  2. springMVC get 提交乱码
  3. linux 运行python 看不到异常信息_Linux异常解决:/usr/bin/env python\r no such file or directory...
  4. 手机忽然就安装不了东西,就是下载好apk打开后按不了安装。怎么处理?
  5. 银行工作的你压力大吗?待遇还好吗?
  6. 新一代华为折叠屏手机MateX2,你会考虑入手吗?
  7. 为什么上一家公司离职?
  8. 都知道李嘉诚先生是一个有钱人
  9. 怎么用U盘重装系统?
  10. 该如何清理手机的垃圾?