背景:信息时代,各种软件层出不穷,而对应用户来说,需要记住大量的用户名和密码,扫码登陆的出现,大大减轻了用户的负担,那么它的原理是什么?
扫码登陆的原理
基本条件:拥有多端的产品,一般会有网页端,桌面端和移动端,大部分都是以移动端授权为主。(不讨论输入密码后点击登录的授权方式,原理类似)
操作过程:网页端和桌面端显示二维码,通过移动端(已经登录),扫码二维码授权登录
实现原理:
登录方:网页端或者桌面端生成唯一的二维码信息,类似uuid的一段全局字符串,然后进入监听阶段,判断是否已经授权。
授权方:通过移动端设备,扫描二维码,获取唯一uuid,让后绑定uuid和用户,发送给服务端。
服务端:接受授权方的绑定请求,及时“推送“登录状态给登录方。
案例分析:
以微信网页版登录为例,打开https://wx.qq.com/,出现二维码,此时已经生成了uuid
通过打开调试模式发现,此时已经进入了监听状态,目前采用的方式是长轮询的方式,也属于服务器推送的一种,接下来会详细讲解
通过截图发现,每隔一段时间,大致为25s,就会向服务器发送一个请求,如果服务器没有返回则会一直等到超时后,在发送下一个请求,这其实就是长轮询的实现方式。
通过分析返回结果,如果没有登录的时候返回的结果为: window.code=408;
移动端此时收到了请求为,界面为:
当点击登录后,此时把从从二维码等到的uuid和当前用户进行绑定,发送给服务端,进行登录授权。
刚才见到在登录端的监听请求,会在第一时间收到通知,返回结果为:
window.code=200;
window.redirect_uri="https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=Ae1HJDjIXMn-GWbWVUBhonuF@qrticket_0&uuid=QfVg2uw4pg==&lang=zh_CN&scan=1547186001";
此处已经登录,然后同步消息,采用同样长训轮的方式,发送请求,及时获取消息:
未完待遇,在下片文章中会详细讲服务器推送的原理和实现方式,https://blog.csdn.net/sky1988818/article/details/86299900