扫描二维码登录实现原理分析
记得比较早使用手机扫码登录是网页版微信,这种免去输入繁琐的账号密码,拿起手机扫一扫就可以登录的方式一开始还是比较惊艳的,确实使用起来很方便。
那它是如何实现的呢?我们来简单研究下。(以淘宝网二维码登录为例)
首先,任何一个二维码表示的都是一串字符串。
我们打开淘宝登录页面:,展示了如下二维码:
通过解析出这张二维码表示的是如下字符串:https://login.m.taobao.com/qrcodecheck.htm?lgtoken=e20115f0e33f373f6be958ca54a60b56&tbscanopentype=notification
这关键的就是lgtoken,这是网页的一个唯一id。
当打开了二维码登录后,我们通过chrome控制台看网络请求,会发现网页在轮询调用接口:https://qrlogin.taobao.com/qrcodelogin/qrcodelogincheck.do?lgtoken=9ed6cfefe97b10b808fbfff0705379b1&defaulturl=&_ksts=1530178881213_61&callback=jsonp62
即拿上面二维码里的lgtoken去请求服务。
如果没有扫码,返回的是:
{ "code": "10000", "message": "login start state", "success": true }
如果扫了码,但是手机上没点击“确认登录”的话,界面显示的是:
轮询接口返回:
{ "code": "10001", "message": "mobile scan qrcode success", "success": true }
如果长时间未扫码,网页端会停止轮询,并显示:
当手机端确认登录后,接口返回的是:
{ "code": "10006", "success": true, "url": "https://login.taobao.com/member/loginbyim.do?uid=cntaobaoxxx&token=ff82fc0d1d395a33d3b38ec5a4981336&time=1530179143250&asker=qrcodelogin&ask_version=1.0.0&defaulturl=https://www.taobao.com&webpas=0b7aed2d43f01825183e4a49c6cae47d1479929926" }
这里返回了一个token,应该就是登录态。
这其中手机端与服务端做了什么交互我们不得而知,但是可以猜测到,客户端在登录态有效的情况下,拿网页端的lgtoken去请求了服端,并且服务端记住了这个lgtoken,并认为登录了。当网页端再次轮询请求接口时,就返回真正的登录态token。
最后以一张流程图总结扫码登录原理:
上一篇: jQuery源码学习笔记二
下一篇: react 配置开发环境