天天看点

二维码技术之微信扫码登录

扫码登录操作过程

  • 登录微信网页版https://wx.qq.com/?lang=zh_CN
  • 手机登录微信,利用“扫一扫”功能扫描网页上的二维码
  • 手机扫描成功后,提示登录“网页版微信”;网页上显示“成功扫描 请在手机点击确认登录”
  • 手机端点击“登录网页版微信”,网页跳转到用户微信操作界面

    整个扫码登录的操作过程还是挺简单的,而且交互的实时性比较好

扫码登录原理

扫码登录大概思路是:微信手机客户端从网页二维码里得到信息,然后发送给网页微信服务器,服务器验证信息并且响应。下面我们对二维码信息进行查看分析:

1.每次打开微信网页版的时候,都会生成一个含有唯一uid的二维码,而且每次刷新后这个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的扫描记录。如果服务器接收不到扫描记录,在特定时长后(目前是27s左右)会接到状态码408(请求超时),表示应继续下一次请求;如果接收到状态码201(服务器创建新资源成功),表示客户端成功扫描了该二维码。

请求超时:返回408

扫码成功:返回201

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

结语

总的来说,微信扫码登陆核心过程应该是:浏览器生成一个唯一的、临时的uid,并且与微信后台服务器之间通过长连接等待客户端扫描此二维码;浏览器通过长轮询查询uid扫描记录,并将客户端上报给服务器的账号信息进行展示。当客户端点击确认后,获得服务器授信的令牌,进行随后的信息交互过程。在超时、网络断开、其他设备上登陆后,此前获得的令牌或丢失、或失效,即需重新验证登录,对授权过程形成有效的安全保护。

继续阅读