1. 每打开一次页面的时候会随机生成一个含有唯一ID的二维码,当然后面带的那个参数是唯一的。XXXXXXXXx?_t=13869253897);
2.当用户使用登陆后的来往扫描该二维码的时候,客户端会解析出二维码中的这个唯一ID会将这个id和手机上的来往账号及密码绑定,并上传到服务器;
3.来往网页版页面每隔1秒或2秒会get请求该id对应的来往账号及密码,如果id绑定上了来往账号和密码,那么就可以请求到账号和密码,就可以自动登陆了。
4.这样实现的目的
1.安全,用户不需要再次输出用户名密码,
2.方便,用户不需要再次输出用户名密码.
3.比如QQ与手机图片互传也是这样一个原理.
这种登陆方式虽然炫酷,但是多少有些违背直觉:
网页端是怎么知道是哪个账号扫它的呢?
前后两个事件是如何联系起来的呢?
这种登陆方式安全么?
为什么选择这种验证方式呢?
这种登陆方式还可以延伸到其他应用场景么?
实现机制
今天隔壁老王在刚买的笔记本上体验了一把网页微信。他是这么做的:
- 在网页打开https://wx.qq.com/,这时网页显示的是一个二维码。
- 用手机打开微信,使用扫一扫功能扫描屏幕上的二维码。
- 扫描成功后,手机微信询问是否确认登陆网页版微信,点击确认后网页微信登陆成功。
让我们慢镜头重放这个过程:
当老王访问 https://wx.qq.com/,他在网页中得到一个二维码。
在这个过程中,老王的浏览器和微信服务器之间建立了一个阻塞的长链接,同时服务器还专门为老王新开了一个有独立UID为SWJNSjNJblBJQT09的Session,并把这个UID嵌入到二维码中返回。
注意,这个UID只是一个随机不重复数,并不是Session ID。
老王看到二维码后,使用手机微信中的扫一扫功能读取了二维码中的UID。手机微信把具有老王身份信息的token A和这个SWJNSjNJblBJQT09的UID打包并做一些特殊的处理后,发给微信服务器进行确认。
隔壁老王: 我们可以使用其他二维码扫描软件来登陆吗?
Cosmo: 二维码的转码规则是统一的。任何二维码扫描软件都可扫除里面包含的信息。比如上图扫出的结果是https://login.weixin.qq.com/l/IbMJ3InPIA==。但是只有微信app能够把包含用户身份信息的token和这个扫描结果做处理,然后与微信服务器通信,告知它是老王扫了这个二维码。所以,重要的不是扫描二维码中的信息,而是谁扫描了这个信息。
当微信服务器通过确认时,它已经同时获得了用户老王和UID为SWJNSjNJblBJQT09的网页端的信息,并知道老王将要通过UID为 SWJNSjNJblBJQT09的Session来访问微信服务。因为老王是一个真实的用户,所以微信服务器就给UID为SWJNSjNJblBJQT09的Session分配一个token B,让老王能够在一定限定条件下访问微信服务。由于网页在加载时候已经把大部分相关资源都预先加载进来了,这个长链接得到确认信息后,网页端只需要加载用户列表,所以响应速度很快,也不需要手动刷新。
隔壁老王: 限定条件是什么呢?
Cosmo: 具体条件要问腾讯才知道,但是这些限定不外乎限定访问时间、限定同时登陆设备数、电脑休眠后Toekn自动收回等等。
现在,老王理论上算是登陆成功了。但是为了不显得突兀,微信服务器贴心地给老王手机发个确认登陆网页版微信的信息,让老王做最后一个确认操作。
隔壁老王: 这种登陆方式安全嘛?
Cosmo: 由于整个验证过程在手机和服务器这个闭环中运行的,有效杜绝了电脑端泛滥的木马和病毒,并且二维码的生成和访问都通过SSL安全通道完成,这种登陆方式在现阶段来说应该是安全的。当然,要保管好手机。
至此为止,老王成功登陆了网页微信啦!
相关推荐
二维码生成与解析,有源代码。能根据输入的信息生成相应的二维码,还能把二维码解析为具体的信息
二维码生成解析工具,输入二维码内容,设置显示的尺寸,版本,生成二维码。 同时导入二维码图片,可解析二维码内容。
利用java自动识别图片中的二维码并解析二维码中的数据利用java自动识别图片中的二维码并解析二维码中的数据利用java自动识别图片中的二维码并解析二维码中的数据利用java自动识别图片中的二维码并解析二维码中的数据...
主要介绍了Java实现的生成二维码和解析二维码URL操作,结合实例形式分析了Java创建与解析二维码,以及文件读写等相关操作技巧,需要的朋友可以参考下
二维码创建解析代码,和标题一样,只有创建和解析两组代码而已
调用QBar库实现二维码的解析,支持中文字符的转换,程序采用VS2017+QT控件实现
详细代码介绍请参看。 http://blog.csdn.net/q229827701/article/details/23284865
java写二维码和解析二维码要用的jar包,具体的流程请参见:http://blog.csdn.net/qq_29656961/article/details/78152123
项目介绍 小程序项目 二维码生成器 《微信小程序》 软件架构 软件架构说明 原生微信小程序 基础功能 ...二维码反向解析器。 二维码反向解析出来字符串 微信名片,本地存储的一个微信名片,简单实现
这是一份C#语言编写的二维码生成解析器的源码,采用QRCode,同时使用了CSkin,使软件界面更加美观,欢迎大家下载!
QRCode生成二维码和解析二维码java,整个eclipse项目源文件,编码和解码过程已封装在jar包中。绝对能用……
上传二维码图片解析二微码!上传二维码提交到后台识别码里面的类容!
二维码工具可解析、生成二维码,可以生成普通无图二维码,也可生成带图标的二维码;且支持二维码读取解析、名片二维码、电话二维码、WIFI热点二维码以及短信二维码等;功能简单实用 。
Asp.net生成二维码和解析二维码源码 源码描述: 这是一个比较实用的生成二维码和解析二维码小程序,首先通过一个一般处 理程序提供一个生成二维码的方法,在页面的ImageUrl调用生成二维码图像。 用户通过上传图像...
实现扫描二维码并且解析二维码 二维码 自动变焦 自定义照相机
java实现生成二维码和解析二维码,只需要传入二维码图片或者传入要生成的二维码数据,就可以解析或生成对应的信息
js识别图片二维码解析网址代码是一款上传图片二维码解析网址代码。
这是一个比较实用的生成二维码和解析二维码小程序,首先通过一个一般处 理程序提供一个生成二维码的方法,在页面的ImageUrl调用生成二维码图像。 用户可以根据输入的内容生成二维码,也 可以根据上传的二维码图解析...
基于Spring Boot的二维码生成与解析接口.zip
Asp.net生成二维码和解析二维码:可以根据输入的内容生成二维码,根据上传的二维码图解析出对应的内容。