网页登录是微信4.2以后版本提供的一种全新的登陆方式。用户只需要用手机扫一扫微信网页中的二维码,就能马上实现微信网页登陆。
虽然这种登录方式很酷,但它或多或少违背了直觉:
网页端如何知道哪个微信账号扫描?前后两个事件是如何连接的?这种登录方式安全吗?微信为什么选择这种验证方式?这种登录方式还能延伸到其他应用场景吗?出于对这些问题的好奇,我和隔壁的老王进行了探索~
实现机制今天隔壁老王在刚买的笔记本上体验了一个网页微信。他是这么做的:
在网页打开https://wx.qq.com/,此时,网页显示二维码。用手机打开微信,用扫描功能扫描屏幕上的二维码。扫描成功后,手机微信询问是否确认登录网页版微信,点击确认后网页微信成功登录。让我们慢慢重放镜头:当老王访问 https://wx.qq.com他在网页上得到了二维码。
在这个过程中,老王的浏览器和微信服务器之间建立了一个阻塞的长链接,同时服务器还专门为老王新开了一个有独立UID为SWJNSjNJbl ** QT09的Session,并把这个UID嵌入二维码返回。
注意,这个UID只是随机不重复数,不是Session ID。
看到二维码后,老王用手机微信的扫描功能读取了二维码UID。手机微信拥有老王身份信息token A和这个SWJNSjNJbl ** QT09的UID包装并进行特殊处理后,发送到微信服务器确认。
隔壁老王: 我们能用其他二维码扫描软件登录吗?Co ** o: 二维码的转码规则是统一的。任何二维码扫描软件都可以扫描其中包含的信息。例如,上图的结果是https://login.weixin.qq.com/l/IbMJ3InPIA==。但只有微信app能够包含用户身份信息token处理扫描结果,然后与微信服务器通信,告诉老王扫描二维码。因此,重要的不是扫描二维码中的信息,而是谁扫描了信息。
当微信服务器通过确认时,它同时获得了用户老王和UID为SWJNSjNJbl ** QT09网页上的信息知道老王要通过UID为 SWJNSjNJbl ** QT09的Session访问微信服务。因为老王是真正的用户,微信服务器会给他UID为SWJNSjNJbl ** QT09的Session分配一个token B,让老王能够在一定限定条件下访问微信服务。由于网页在加载时候已经把大部分相关资源都预先加载进来了,这个长链接得到确认信息后,网页端只需要加载用户列表,所以响应速度很快,也不需要手动刷新。
隔壁老王: 有哪些限制条件?Co ** o: 具体条件要问腾讯才知道,但这些限制无非是限制访问时间、同时登录设备数量、计算机休眠后Toekn自动回收等。
现在,老王理论上已经成功登陆了。但为了不显得突然,微信服务器亲密地向老王的手机发送了一条确认登录网络版微信的信息,让老王做最后的确认操作。
隔壁老王: 这种登陆方式安全吗?Co ** o: 由于整个验证过程在手机和服务器的闭环中运行,木马和病毒在计算机木马和病毒泛滥,通过二维码的生成和访问SSL安全通道完成后,这种登录方式在现阶段应该是安全的。当然,保管好手机。
到目前为止,老王已经成功登录了网页微信!
背后原因酷酷说,张小龙多次提到营销的目的是让用户感觉‘酷’。口碑传播的基础是‘有趣’。酷是体验,体验比功能更容易传播。 兴趣大于功能,用户想要的是‘酷’。 因此,这种登录方式的提出是基于酷一词的微信营销手段。
张小龙曾强调入口竞争。PC入口在搜索框中,手机上的入口在二维码中。因此,当二维码扫描和登录时,微信抓住了手机入口的重要组成部分。未来,微信将改变我们的登录方式,最终成为我们的移动身份证。现成的例子之一是通过扫描智能电视上的二维码登录帐户。
据说有一种说法是,微信的二维码是从日本登录的Line。有趣的是,目前Line这项服务已经关闭。所以这就是日本人擅长战术而忽视战略的例子?
这种设计突出了移动核心O2O核心突出了微信为移动而生的理念。
阴谋论说微信对腾讯某部门影响太大,受到限制?(瞎猜)
总结以知乎黄良懿的回复为微信二维码登录总结:
因此,核心过程应该是:浏览器获得临时 id,通过长连接等待客户端扫描id 二维码后,客户端从长连接中报告 server 显示帐户信息。点击客户端确认后,获取服务器授信令牌,进行随后的信息交互过程。加班、网络断开等设备登录后,以前获得的令牌丢失或失效,对授权过程形成有效的安全保护。
下次研究陌陌……
参考资料知乎:微信扫描二维码登录网页的原理是什么,前后两个事件是如何联系的?微信二维码登录原理
本文作者:Wenzhe 个人网站:Hackjutsu Dojo
更多精彩内容,欢迎访问官网 http://BitTiger.io 或关注 论码农自我修养 微信微信官方账号:bit_tiger
私域操盘咨询
申请免费使用