https://www.cnblogs.com/pocn/p/5848629.html#undefined
https://www.jianshu.com/p/707ec93799b2
微信扫码界面
如果你用我查查、支付宝、新浪微博等软件扫码二维码,你会发现此二维码解析出来是如下的网址:
https://login.weixin.qq.com/l/obsbQ-Dzag==
扫码登录具体的每个步骤:
第一步: 用户 A 访问微信网页版,微信服务器为该会话生成一个全局唯一的 ID
,上面的 URL 中 obsbQ-Dzag== 就是这个 ID,而且每次刷新后都会改变。这样可以保证一个uid只可以绑定 手机微信产生的token
,确定登录用户的唯一性。
第二步: 用户A打开自己的手机微信并扫描这个二维码
,并提示用户是否确认登录。
更具体得是:
除了返回唯一的uid,实际上打开这个页面的时候,浏览器跟服务器还创建了一个长连接
,请求uid的扫描记录
。
-
如果没有,在特定时长后(目前是27秒左右)会接到
状态码408
(请求超时
),表示应该继续下一次请求; -
如果接到
状态码201
(服务器创建新资源成功),表示 客户端扫描了 该二维码
。
第三步: 手机上的微信是登录状态,用户点击确认登录
后,获得服务器授信的令牌
,进行随后的信息交互
过程。
第四步: 服务器将这个 ID 和用户 手机微信产生的token
绑定在一起
,并通知网页版微信
,这个 ID 对应的微信号为用户 A,网页版微信加载用户 A 的微信信息
,至此,扫码登录全部流程完成。在超时
、网络断开
、其他设备上登录后
,此前获得的令牌或丢失
、或失效
,对授权过程形成有效的安全防护。
关键点: 是将当前已登录的微信和扫出来的 ID 提交到微信服务器,类似的应用还有扫码支付
、扫码加公众号
等功能。