浏览器怎么扫描二维码_每天扫描二维码,还不知道二维码登录原理的看过来

转载自:GitHub CyC2018/Backend-Interview-Guide

作者:CyC2018

本文阅读大概需要10分钟

8de8ed95ff0eea70616885edbbfd0a64.png

网图侵删

近些年来,越来越多的网站支持使用手机 APP 扫二维码进行登录。

传统的登录方式需要用户在浏览器中输入账号密码,完成输入之后点击登录按钮将这些数据发送到服务器上,服务器对这些数据进行验证并返回特定的状态码和 Cookie 等信息给浏览器。

扫二维码登录这种方式不需要用户输入账号密码,这些信息保存在手机 APP 中,并由 APP 发送到服务器上。但是这种方式有几个问题需要解决:

1、服务器不能主动发送信息给浏览器,那么要怎么将服务器验证结果的状态码让浏览器得?

2、要怎么保证浏览器的登录信息和某个账户关联?

实践

打开微信网页版,后出现登录二维码。

使用二维码识别软件可以得到这个二维码中包含的字符串信息,这是一个 URL 地址,包含了一个参数 I=AbRKq90dXQ==。

e63e7996df2f1f1dcc46837c29ae2a03.png

网图侵删

再打开 Chrome 的开发者工具观察网络请求,注意到浏览器在不断地发送

https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=AbRKq90dXQ==&tip=0&r=-1945474617&_=1548133675454

这个请求,并且其中的 uuid 参数值和二维码中的 I 参数一样。

18c7933f5a0d7f609468f3c70b9006ad.png

网图侵删

loginicon: trueuuid: AbRKq90dXQ==tip: 0r: -1945474617_: 1548133675454

分析

通过上面的实践我们知道,登录二维码包含了服务器的 URL 地址,其中也包含了 uuid 参数。当用户使用手机 APP 扫描二维码登录之后,发送用户名、密码、uuid 等信息给服务器,服务器验证之后就将 uuid 和该账户关联并保存到 Session 中

浏览器需要不断地向服务器发送 AJAX 请求,该请求包含了 uuid 参数,当查询到服务器已经存在 uuid 和账户的关联信息之后,就可以知道是某个账户扫描了该二维码登录。

服务器返回 200 成功状态码Cookie 和账户信息等数据,浏览器接收到这些数据之后就可以完成登录操作。应该注意到,为了使的浏览器能不断发送 AJAX 请求,建立的 HTTP 连接需要是长连接。

演示

7fe1df8237106bb7def1eafe2578e3e8.gif

微信二维码登录过程

扩展

二维码除了可以用于 APP 扫码登录操作之外,还可以用来进行支付宝扫码付款等,原理其实差不多。

---欢迎关注“Java圣斗士”,我是你们的小可爱(✪ω✪)---

---专注IT职场经验与IT技术分享的灵魂导师---

---期待与您的互动哦!---

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值