实现网站二维码扫描登录

来源:互联网 发布:2017编程语言 编辑:程序博客网 时间:2024/04/28 14:40

在尝试使用网页版微信时,发现微信的登录方式比较酷。区别与常用的用户名和密码的登录方式,网页微信登录只需要轻轻一扫,即可方便的实现登录功能。


下面尝试根据个人的理解对其可能的架构猜测一番。总体来看,扫描二维码实现网站的登录并不是太困难的事情。首先来看一下二维码登录的整体架构:
在整个架构中,主要包含了几个模块:手机App、浏览器、Web服务器以及存储服务(session服务)。整个方案的主要流程如下:

1)获取二维码
在打开weixin.qq.com整个页面之后,会在浏览器端种下sessionid,其中sessionid与浏览器中展示的二维码已经了映射关系。如方案一架构图所示:Web服务器接收到浏览器的<1.获取二维码>请求之后,生成与这个连接对应的session以及二维码图片,同时存储sessionid与二维码图片的一一映射关系(必须保证二维码图片与sessionid的唯一性,后面流程中,需要根据二维码图片来检索sessionid以实现通知该浏览器实现登录);

2)扫描二维码
手机App扫描浏览器的二维码图片,在手机App上完成确认授权之后,自动将手机App的登录态信息提交给Web服务器。Web服务确认提交等手机登录态合法之后,根据二维码检索出浏览器的链接信息即sessionid,与之对应的sessionid被设置为已经完成登录,同时绑定合法的浏览器端的用户登录态信息;

3)通知浏览器完成登录
浏览器如何及时的获取已经完成授权登录了呢?其实,针对这类问题主要有两种解决方案:
a)ajax异步定时轮训请求
采用这种方法技术实现成本比较低,伪实时,实时性的程度取决于ajax请求的频繁程度,高频度的请求无疑会给服务器带来不小的开销,所幸的是,针对这个登录场景并发请求量不会太高;
b)Http comet实时推送
采用comet实时推送给的方案,就是下图方案二所示,手机App确认授权之后,推送服务会将浏览器的登录信息实时推送给浏览器,这种方案的实时性无疑是最高的,在网页聊天、即时监控等场景下比较使用,用户的产品体验也会非常高,带来的问题在于:高昂的技术实现成本。



4)本地浏览器绑定cookie
浏览器接收到通知之后,架构用户信息关键是用户登录凭证写入到浏览器的Cookie中,在后续请求其他服务的过程中,作为最基本的请求参数进行传递;


关于Comet推送的技术请参见:
 http://www.ibm.com/developerworks/cn/web/wa-lo-comet/

其实,上面写的都是错的,我压根没有做过类似的服务。


2 0
原创粉丝点击