微信二维码登录原理是什么_请使用微信扫描二维码登录

微信二维码登录原理是什么_请使用微信扫描二维码登录网页登陆是微信4.2以后版本提供的一种全新的登陆方式。用户只需要用手机扫一扫微信网页中的二维码,就能马上实现微信网页登陆。这种登陆方式虽然炫酷,但是多少有些违背直觉:网页端是怎么知道是哪个微信账号


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

网页登陆是微信4.2以后版本提供的一种全新的登陆方式。用户只需要用手机扫一扫微信网页中的二维码,就能马上实现微信网页登陆。

这种登陆方式虽然炫酷,但是多少有些违背直觉:

  • 网页端是怎么知道是哪个微信账号扫它的呢?
  • 前后两个事件是如何联系起来的呢?
  • 这种登陆方式安全么?
  • 为什么微信选择这种验证方式呢?
  • 这种登陆方式还可以延伸到其他应用场景么?

出于对这些问题的好奇,我和隔壁老王做了一番探索~

实现机制

今天隔壁老王在刚买的笔记本上体验了一把网页微信。他是这么做的:

  1. 在网页打开,这时网页显示的是一个二维码。
  2. 用手机打开微信,使用扫一扫功能扫描屏幕上的二维码。
  3. 扫描成功后,手机微信询问是否确认登陆网页版微信,点击确认后网页微信登陆成功。

让我们慢镜头重放这个过程:
当老王访问 ,他在网页中得到一个二维码。

在这个过程中,老王的浏览器和微信服务器之间建立了一个阻塞的长链接,同时服务器还专门为老王新开了一个有独立UID为SWJNSjNJblBJQT09的Session,并把这个UID嵌入到二维码中返回。

注意,这个UID只是一个随机不重复数,并不是Session ID。

老王看到二维码后,使用手机微信中的扫一扫功能读取了二维码中的UID。手机微信把具有老王身份信息的token A和这个SWJNSjNJblBJQT09的UID打包并做一些特殊的处理后,发给微信服务器进行确认。

隔壁老王: 我们可以使用其他二维码扫描软件来登陆吗?
Cosmo: 二维码的转码规则是统一的。任何二维码扫描软件都可扫除里面包含的信息。比如上图扫出的结果是。但是只有微信app能够把包含用户身份信息的token和这个扫描结果做处理,然后与微信服务器通信,告知它是老王扫了这个二维码。所以,重要的不是扫描二维码中的信息,而是谁扫描了这个信息。

当微信服务器通过确认时,它已经同时获得了用户老王和UID为SWJNSjNJblBJQT09的网页端的信息,并知道老王将要通过UID为 SWJNSjNJblBJQT09的Session来访问微信服务。因为老王是一个真实的用户,所以微信服务器就给UID为SWJNSjNJblBJQT09的Session分配一个token B,让老王能够在一定限定条件下访问微信服务。由于网页在加载时候已经把大部分相关资源都预先加载进来了,这个长链接得到确认信息后,网页端只需要加载用户列表,所以响应速度很快,也不需要手动刷新。

隔壁老王: 限定条件是什么呢?
Cosmo: 具体条件要问腾讯才知道,但是这些限定不外乎限定访问时间、限定同时登陆设备数、电脑休眠后Toekn自动收回等等。

现在,老王理论上算是登陆成功了。但是为了不显得突兀,微信服务器贴心地给老王手机发个确认登陆网页版微信的信息,让老王做最后一个确认操作。

隔壁老王: 这种登陆方式安全嘛?
Cosmo: 由于整个验证过程在手机和服务器这个闭环中运行的,有效杜绝了电脑端泛滥的木马和病毒,并且二维码的生成和访问都通过SSL安全通道完成,这种登陆方式在现阶段来说应该是安全的。当然,要保管好手机。

至此为止,老王成功登陆了网页微信啦!

背后原因

酷炫爽说
张小龙多次提到“营销的目的是让用户觉得‘爽’。口碑传播的基础是‘好玩’。爽是体验,体验比功能更易传播。” “趣味性大于功能,用户要的是‘爽’。” 所以,这种登陆方式的提出是微信的一种基于“爽”字的营销手段。

入口争夺说
张小龙曾强调“PC的入口在搜索框,手机上的入口在二维码”。所以二维码扫描登陆时微信抢占手机入口的重要一环,日后微信将通过这个入口变革我们的登陆方式,最终变成我们的移动身份证。现成的一个例子就是通过扫描智能电视上的二维码登陆账号。

借鉴说
有一派说法是,微信这个二维码登陆借鉴自日本的Line。有趣的是,目前Line已经关闭这项服务。所以这就是日本人精于战术疏于战略的例子?

移动核心说
这样的设计突出了移动O2O核心,突出了微信是为移动而生的理念。

阴谋论说
微信对腾讯某部门冲击太大,受到限制?(瞎猜的)

总结

引用知乎黄良懿的回复作为微信二维码登陆的总结:

所以说,核心过程应该是:浏览器获得一个临时 id,通过长连接等待客户端扫描带有此 id 的二维码后,从长连接中获得客户端上报给 server 的帐号信息进行展示。 并在客户端点击确认后,获得服务器授信的令牌,进行随后的信息交互过程。 在超时、网络断开、其他设备上登录后,此前获得的令牌或丢失、或失效,对授权过程形成有效的安全防护。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167855.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 腾讯ssl 免费证书_腾讯云ssl证书安装教程

    腾讯ssl 免费证书_腾讯云ssl证书安装教程项目收尾,闲下来捣腾捣腾微信小程序,配置request域名的时候发现需要https协议,意思就是请求服务端必须是HTTPS,当然,如果你只是自己玩一玩小程序开发,不上线,也可以通过微信开发者工具设置使用普通http请求来让自己过把瘾。大部分ssl证书都需要money,对于个人开发者成本有点高,像我这种穷屌当然是想方设法去找免费的ssl。推荐一篇博文,里面罗列了大部分免费的ssl证书认证点击打开链接…

    2022年9月9日
  • SpringMVC 执行流程

    SpringMVC 执行流程springMVC(javaweb开发框架)1、MVC三层架构:模型(service、dao)、视图(JSP等)、控制器(Controller)什么是mvc?*MVC是模型、视图、控制器的简写,是一种软件设计规范*是将业务逻辑、数据、显示分离的方法来组织代码*MVC主要的作用就是降低了控制器(Controller)和视图(View)之间的双向耦合度*MVC不是一种设计模式、MVC是一种架构模式。当然不同的MVC存在着差异Model(数据模型):提供要展示的数据。因此包含数据和

    2022年6月28日
  • eclipse安装android_安卓studio怎么打包apk

    eclipse安装android_安卓studio怎么打包apkEclipseandroid开发更改apk名字有以下几步:第一步,修改工程包名在eclipse里,找到项目包和java包(原则上都一样),就可以按”F2″修改名字,随之,源.java也会得到相应的修改;然而每个.java文件都需要把如下图内容,再额外修改一下第二步,修改AndroidManifest.xml文件AndroidManifest.xml里的内容是android工程的相关配置文件。工程文件的解析具体可参考:某鸟教程.第三步,修改Strings.xml文件然后是…

    2022年10月5日
  • 惊艳四射的意思_词语什么四射

    惊艳四射的意思_词语什么四射分享一些CSS3相关的按钮和导航,大部分素材应该都来自一些老外的设计,希望接下来的几篇文章对你会有所帮助,当然你的支持和点评也是我坚持做下去的动力。正文今天的这款CSS3按钮应该说是非常的光彩夺目,因为不仅它的色彩调得非常的和谐,更美妙的是如果你用chrome或者safari浏览器还能看到按钮发光的特效。以下是效果截图在线示例    |    源码下载这里的发光效果主要是如

    2022年10月29日
  • Linux下Opengrok安装部署与使用

    Linux下Opengrok安装部署与使用OpenGrok简单安装配置说明

    2022年5月18日
  • Java private关键字及作用

    Java private关键字及作用private关键字使用场景:用private关键字将需要保护的成员变量进行修饰private关键字注意事项:一旦使用了private进行修饰,那么本类当中仍可以随意访问;但是超出本类范围就不可

    2022年7月3日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号