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

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 开启 MySQL 慢查询日志

    开启 MySQL 慢查询日志开启MySQL慢查询日志开启mysql的慢查询日志,可以记录查询超过指定时间的sql语句,可以方便更好的优化数据库系统的性能。一、参数说明slow_query_log:慢查询日志开启状态slow_query_log_file:慢查询日志存放位置long_query_time:查询超过多少秒才记录二、设置步骤1、查询相关参数配置mysql>showvariab…

    2022年10月9日
    2
  • linux抓包命令到文件,Linux下抓包命令tcpdump详解「建议收藏」

    linux抓包命令到文件,Linux下抓包命令tcpdump详解「建议收藏」tcpdump是一个命令行实用程序,可用于捕获和检查进出系统的网络流量。它是网络管理员中用于排除网络问题和安全测试的最常用工具。尽管名称如此,使用tcpdump,您也可以捕获非TCP流量,例如UDP,ARP或ICMP。捕获的数据包可以写入文件或标准输出。tcpdump命令最强大的功能之一是它能够使用过滤器并仅捕获要分析的数据。在本文中,我们将介绍如何在Linux中使用tcpdump命令的基础…

    2022年8月20日
    13
  • 菜鸟教程java_JAVA笔记(菜鸟教程)[通俗易懂]

    菜鸟教程java_JAVA笔记(菜鸟教程)[通俗易懂]1.局部变量是在栈上分配的。2.局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。3.类变量(静态变量)和实例变量区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象。4.访问控制范围访问控制.jpg(1)private类内访问(2)被声明为protected的变量、方法和构造…

    2022年6月6日
    34
  • checkbox选中和不选中 jqu_jquery checkbox 选中不选中

    checkbox选中和不选中 jqu_jquery checkbox 选中不选中展开全部$(function(){//动态绑定默认状态//$(“#ck”).attr(“checked”,true)//选中//$(“#ck”).attr(“checked”,false)//未选中//点击判断选中还是未选中$(“#ck”).click(function(){if($(this).is(“:checked”)){alert(“选中”);}else{alert…

    2022年6月30日
    23
  • mybatis开发dao两种方法

    mybatis开发dao两种方法mybatis是一个支持普通SQL查询,存储过程和高级映射的优秀的持久层的框架,是apache下的顶级项目。mybatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。mybatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO映射成数据库中的记录。其中,开发dao有两种方法,一种原始的dao开发方法,程序员需要写dao接口和dao实现类。另一种…

    2022年6月13日
    33
  • PHP递归算法_php递归函数详解

    PHP递归算法_php递归函数详解先设置数据在本地数据库,设置前要先了解pid字段的关系。如果做成菜单还需添加一个路由字段,自行定义。第一种方式先将数据提取出转换成数组。重点是Yarray方法里的递归方式。接下来进行解析方式。重点:一定要在进行递归之前声明一个静态数组,不然会导致数组覆盖。剩下的就是注释的内容也就是判断父节点与节点来判断等级。这步指来回方法调用本身进行处理递归。最后数据会变成其中关系为pid数值存在与id下的下级关系,level为处于第几级;我们来输出一下看看结.

    2022年8月11日
    8

发表回复

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

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