微信扫码登录网页实现原理

扫码登录操作过程

浏览器输入:https://wx.qq.com/?lang=zh_CN手机登录微信,使用扫描功能扫描网页上的二维码。手机扫描成功后,提示登录页显示成功扫描 请点击手机确认登录手机点击登录网页版微信

整个扫码登录的操作过程还是挺简单的,而且交互地实时性比较好,如果网络不是非常阻塞,整个过程还是非常快的。

扫码登录原理

扫描代码登录的一般想法是:微信移动客户端从网页二维码中获取一些信息,然后发送到网页微信服务器,网页服务器验证信息并响应。下面,我们使用火狐浏览器Firebug看看工具,到底是怎么回事!

1.每次打开微信网页版,都会生成一个包含唯一内容的版本uid二维码,每次刷新都会改变。这可以确保一个uid只能绑定一个帐户和密码,以确定登录用户的唯一性。您可以使用手机UC浏览器提供的扫码功能可以查看二维码中的信息,但不会自动打开地址。我刷新了三次,扫描结果如下,最后一串是uid:

1) https://login.weixin.qq.com/l/48e24d66bdbc4f

2) https://login.weixin.qq.com/l/0787fb4fa7ad4c

3) https://login.weixin.qq.com/l/92781a4a7f1c47

通过查看网页源代码,该页面在加载后提前加载了大量登录所需的相关资源,因此登录用户在确认后显示用户信息非常快。

2.除了返回唯一的uid,事实上,当页面打开时,浏览器还与服务器创建了长连接,请求uid扫描记录。如果没有,状态码408(请求超时)将在特定时间后(目前约27秒)收到,表示下一个请求将继续;如果收到状态码201(服务器成功创建新资源),说明客户端扫描了二维码。

请求加时:返回408

扫码成功:返回201

代码结构:长轮询:

   function _poll(_asUUID) { // .... $.ajax({ type: "GET",url: "https://login." _sBaseHost "/cgi-bin/mmwebwx-bin/login?uuid=" _asUUID "&tip=" show_tip,dataType: "script",cache: false,timeout: _nAjaxTimeout,success: function(data,textStatus,jqXHR) { switch (_aoWin.code) { case 200: / .... break; case 201: / .... break; case 408: / .... break; case 400: case 500: / .... break; } },error: function(jqXHR,textStatus,errorThrown) { // .... }

3.用户使用登录后的微信扫描二维码时,会uid生产手机微信token绑定并上传到服务器。此时,浏览器通过长轮查询查询uid扫描记录,立即获得201响应码,然后通知服务器,客户端进入一个新页面(即要求您点击确认的按钮)。点击客户端确认后,获取服务器授信令牌,进行随后的信息交互过程。

结语

一般来说,微信扫码登录的核心过程应该是这样的:浏览器获得一个独特的、临时的uid,通过长连接等待客户端扫描uid二维码后,从长连接中获取客户端报告给服务器的账户信息进行显示。点击客户端确认后,获取服务器授信令牌,进行随后的信息交互过程。加班、网络断开等设备登录后,以前获得的令牌丢失或失效,对授权过程形成有效的安全保护。

扫码免费用

源码支持二开

申请免费使用

在线咨询