全国公务员考试培训联盟

Android 面试攻略 之 微信扫码登录内部实现原理

只看楼主 收藏 回复
  • - -
楼主
  

本文作者


本文由马伟奇投稿。

马伟奇的博客地址:

http://www.jianshu.com/u/53e5012c55a3


打开网页版微信,可以看到如下的页面:




网页版微信地址:

https://wx.qq.com/


如果你用我查查、支付宝、新浪微博等软件扫码二维码,你会发现此二维码解析出来是类似如下的网址:

https://login.weixin.qq.com/l/obsbQ-Dzag==


那么他是如何做到扫码登录的呢,接下来详细介绍一下扫码登录具体的每个步骤:



① :用户 A 访问微信网页版,微信服务器为这个会话生成一个全局唯一的 UUID二维码,上面的 URL 中 obsbQ-Dzag== 就是这个 UUID,且每次刷新后都会改变。


这样可以保证一个UUID只可以绑定一个账号和密码,确定登录用户的唯一性。我刷新三次,扫描结果如下,其中最后面那串数字就是UUID:此时系统并不知道访问者是谁。






② :除了返回唯一的uid,实际上打开这个页面的时候,浏览器跟服务器还创建了一个长连接,请求uid的扫描记录。


如果没有,在特定时长后会接到状态码408(请求超时),表示应该继续下一次请求;如果接到状态码201(服务器创建新资源成功),表示客户端扫描了该二维码。


请求超时:返回408




扫码成功:返回201





③:手机上的微信是登录状态,用户点击确认登录后,手机上的微信客户端将微信账号和这个扫描得到的 ID 一起提交到服务器





④ :服务器将这个 ID 和用户 A 的微信号绑定在一起,并通知网页版微信,这个 ID 对应的微信号为用户 A,网页版微信加载用户 A 的微信信息,至此,扫码登录全部流程完成。


总的来说,微信扫码登录核心过程应该是这样的:


  1. 浏览器获得一个唯一的、临时的UUID

  2. 通过长连接等待客户端扫描带有此UUID的二维码后,从长连接中获得客户端上报给服务器的帐号信息进行展示。

  3. 并在客户端点击确认后,获得服务器授信的令牌,进行随后的信息交互过程。


在超时、网络断开、其他设备上登录后,此前获得的令牌或丢失、或失效,对授权过程形成有效的安全防护,类似的应用还有扫码支付、扫码加公众号等功能.


ok,其实到这里才是开始,下面是视频版本的该文的介绍,注意在wifi情况下点击~~




本文作者是在上周我推送Android性能优化-内存泄漏的8个Case这篇文章后联系我的,说他录制了性能优化一个系列的视频,觉得视频更加帮助大家理解,他自己也有运营公众号,但是还是希望我能帮忙宣传一下~


内存泄露的视频如下:




然后我们沟通了挺多,说实话令我挺诧异的,因为录制视频其实是一个非常辛苦的事情,一个30分钟的视频,作者可能需要重复非常多遍才能保证一个视频录制完成(我深有体会~~)~~


我大致看了下,目前作者已经录制了非常多的视频,所有视频都是直接公开的:



视频链接:

http://v.qq.com/vplus/56c7ec6c231bdbafd198c58fb86eb4dc


感兴趣的可以点击原文链接,查看他的文章,几乎所有的知识点都有配套的视频(说实话佩服到我了,只是文章的排版不太好)~~


好了,作者所做的事情,让我觉得很有意义,也希望作者能坚持下去!


如果大家喜欢视频来学习知识点,也可以扫描他的二维码,关注他的公众号,希望本文能够帮助他更好的做知识分享。

ZZS

无论你是有 Java 基础希望学 Android 开发的程序员,还是想进一步提升能力的 Android 开发者,都可以在这个Udacity & Google 官方参与制作 的课程项目中找到适合自己的成长路径!



*独家硅谷技术课程

*行业领导者设计的实战项目

*一对一学习辅导

*名企颁发学习认证

*毕业直达滴滴面试


如果你有想学习的文章直接留言,我会整理征稿。如果你有好的文章想和大家分享欢迎投稿,直接向我投递文章链接即可。


欢迎长按下图->识别图中二维码或者扫一扫关注我的公众号:


举报 | 1楼 回复