经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 编程经验 » 查看文章
扫描二维码登录实现原理分析
来源:cnblogs  作者:张振伟  时间:2019/3/27 9:00:27  对本文有异议

记得比较早使用手机扫码登录是网页版微信,这种免去输入繁琐的账号密码,拿起手机扫一扫就可以登录的方式一开始还是比较惊艳的,确实使用起来很方便。

那它是如何实现的呢?我们来简单研究下。(以淘宝网二维码登录为例)

首先,任何一个二维码表示的都是一串字符串。

我们打开淘宝登录页面:https://login.taobao.com/member/login.jhtml,展示了如下二维码:

通过草料二维码解析出这张二维码表示的是如下字符串:
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去请求服务。

如果没有扫码,返回的是:

  1. {
  2. "code": "10000",
  3. "message": "login start state",
  4. "success": true
  5. }

如果扫了码,但是手机上没点击“确认登录”的话,界面显示的是:

轮询接口返回:

  1. {
  2. "code": "10001",
  3. "message": "mobile scan QRCode success",
  4. "success": true
  5. }

如果长时间未扫码,网页端会停止轮询,并显示:

当手机端确认登录后,接口返回的是:

  1. {
  2. "code": "10006",
  3. "success": true,
  4. "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"
  5. }

这里返回了一个token,应该就是登录态。

这其中手机端与服务端做了什么交互我们不得而知,但是可以猜测到,客户端在登录态有效的情况下,拿网页端的lgToken去请求了服端,并且服务端记住了这个lgToken,并认为登录了。当网页端再次轮询请求接口时,就返回真正的登录态Token。

最后以一张流程图总结扫码登录原理:

原文链接:http://www.cnblogs.com/zhangzw0505/p/10599686.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号