2014年5月17日星期六

Architect_010:微信网页版二维码登陆原理(摘录+整理)

登录手机微信后,使用微信的扫一扫功能扫描wx.qq.com上的二维码,成功后,会在手机显示如下画面:
同时在网页上,会显示如下画面:

确认后,就可以自动登录网页版的微信了,整个过程感觉挺有意思的,但它的原理是什么呢?
用其它条形码扫描软件扫一下微信登陆的二维码,发现是这个样子:

现在,可以猜一猜它背后的原理了。

1. 用户访问微信网页版,微信服务器使用二维码技术为这次对话生成一个唯一会话ID。
完整的URL就是上图显示的样子:https://login.weixin.qq.com/l/[会话ID]。

2. 用户打开自己已经登录的手机微信并扫描这个二维码,得到完整的URL后,然后发送给URL所指向的服务器,得到access_token
所谓access_token,可以理解为访问用户微信账户的许可令牌,因为用户已经在移动端微信登录,所以可以根据已经登录的账户获取该账户的access_token。
有了access_token,登录时就不必输入账号+口令了。

3. 微信服务器根据会话ID和access_token确认此用户确实是他自己本人,然后询问客户是否要登录网页版微信,同时刷新网页版页面提示扫描成功。
道理和步骤2一样,因为用户已经在移动端登录,具有合法身份。

4. 用户确认后,自动在网页版登录用户微信。
此时已经具备了自动登录的两个条件:
(1)本次会话的唯一ID。
(2)得到用户授权的access_token。
因此,得到用户确认后,已经在移动端登录的用户就可以在本次会话中使用access_token自动登录网页版微信。

至于为什么在手机上点击确认后web页面会自动登录,我想可能是使用了AJAX技术不断地向服务器询问用户是否确认,确认了就自动登录。
当然,也不排除是使用了比较新的WebSocket技术来实现轮询,但是WebSocket对浏览器的版本要求较高。

微信网页版二维码登陆原理大概就是这样吧,不对之处,不吝赐教。

参考文献:
http://www.zhihu.com/question/22991085/answer/24073398
http://www.oschina.net/question/568208_67170?sort=time
http://www.cnblogs.com/xusir/p/3473554.html
http://www.itlvs.com/news/opensource/2014/0305/189.html

没有评论: