微信扫码登录解析

微信扫码登录解析

下面也只是个人猜想,只是说在逻辑上讲得通,毕竟微信源码也没公布

场景描述

手机输入账号密码,点击登录微信按钮;

微信服务器去查数据库,认证成功,然后生成一个唯一的token,把token也发给客户端;

以后客户要发什么请求,就带上这个token,服务端根据token来判断有没有请求的资格;

后面为了缓解服务端压力,引入了refresh token,时序图如下:

image-20200509093411402

image-20200509002215949

关于token的更多内容,可以参考这篇博客


听上去,这个token和cookie有点类似;

不过如果用cookie存session id等数据时,会有CSRF(Cross-Site Request Forgery)的风险;

简单描述:你浏览了网站A,网站A发了Cookie给你;当你还没关闭网站A时(严格的说是Session还没有失效的时候),你浏览了网站B。网站B里面有段Ajax的代码,这段代码的内容是向网站A发某个请求,此时浏览器无脑地加上网站A的cookie,然后服务端收到之后,提取cookie中的session id,就以为是你在操作。

另外,token还能做权限控制,比如提供第三方特定的权限,这个叫OAuth;第三方应用请求某种权限,你同意之后,第三方就获得某种权限的token,就好比Linux中chmod的1-7的权限。之后第三方向服务端发送token,服务端收到1-7这个权限id后,就知道可以提供哪些请求操作给你。

此外还有session,关于这三者的关系,可以参考这篇博客,写得特别好


有点扯远了...

现在看看登录微信客户端的流程:

首先手机端已经登录,拿到了token;

打开客户端,首先发生了这么一件事

image-20200509112620761

这时我们拿手机扫描二维码,这个二维码保存的其实是一个http地址,所以微信扫描识别完会自动发起请求;

格式大概是这样子:https://wx.qq.com/x/一串uid

中间那个x应该是PC端的代表,网页版的是L

发送的请求会有下面的流程

image-20200509113559377

这时我们看到PC端显示了我们微信的头像,然后提示要在手机端确认...

下一步,手机点击确认

image-20200509114620471

PC端拿到token了,之后PC端就可以拿着这个token为所欲为了;PC端用这个token请求你的好友信息列表,由于服务端是根据token来判断的,所以就能返回数据,也就意味着PC端登录成功。


补充几句

uid迟迟不绑定,也是会失效的,释放长连接

登录PC端后,当你在其他地方或者网页上登录时,token会绑定新的uid;此时根据旧的uid,找到socket,然后通知下线。

登录后必然会涉及到通信,关于通信的原理可以参考这篇博客,如果想看代码实战,可以参考这个这个视频,代码是GO语言,但是原理都是一样的,属于网络编程;

posted @ 2020-05-09 12:01  木灬匕禾页  阅读(229)  评论(0)    收藏  举报