无线WIFI在商业地位中扮演的角色越来越多,咖啡店、餐厅等基本都部署了wifi,我们时常可以在店内看到通过扫微信的二维码关注其公众号后便可以接入无线网络,这是接入无线网络认证的一种方式——微信关注公众号。安装在店里后,打开微信关注企业微信账号即可免费wifi,取消关注就不能上网了,那么这是通过何种方式实现的,怎么控制的呢,下面来解释一下。

知识预备

  • 一般商家的微信公众号都是开了微信公众号的API,你需要在微信公众号管理页面中配置商家的服务器地址以及一些公众号权限认证的信息,该服务器是用来接收腾讯发过来的各种微信事件,比如有人关注了公众号,有人取消关注了公众号,有人向公众号发送了微信并回复等。所以,当你关注了该公众号后,商家的服务器能够得到你的微信账号信息并入库记录,当你取消关注后,商家服务器同样能够把你在他们自己数据库中的记录标注出来。

  • 无线路由器一般通过手机WIFI的mac地址来选择放行/禁止其联网的行为。

  • 无线路由器一般有类似管理接口,使得像RADIUS服务器可以通过该接口控制无线路由器对终端MAC地址的过滤行为。


使用场景


场景1-终端用户在商家WIFI网内,关注商家公众号

      用户A通过手机终端连接商家无线路由器(下面将以AP代替),该AP无密码限制,AP得到了该终端的MAC地址A_mac_address。此时用户发现连上WIFI后不能上网,浏览任何网页都会跳到一个广告页面,页面内容为告知用户在AP网内使用微信关注公众号(该AP放行微信URL以及商家自己服务器的URL,如果用户未验证的话,AP就会每隔几分钟就会自动踢掉用户,使得用户WIFI断开连接,用户必须手动再次连接该WIFI才能重新连接,防止用户蹭网刷微信)。于是用户照做,关注商家公众号后,公众号会向用户A推送一条包含“一键上网”链接的消息,用户在AP网内点击该链接后直接访问商家的RADIUS服务器,服务器能够取到该请求发送者的微信ID,MAC地址等,然后核对该微信ID是否已关注商家公众号,如果已关注,则将该MAC地址和微信ID一起关联入库,只要该用户A一直关注该公众号,在商户AP下就能够一直保持放行权限,上网无阻。使得A后续再次来到该商户连接WIFI上网达到用户无感知的效果。

场景2-终端用户在自有网络内(手机蜂窝数据,其他WIFI下),关注商家公众号

       用户A通过非商家WIFI环境中关注商户公众号,用户A的微信ID被商户记录入库,被推送“一键上网”链接,用户点击该链接后被告知必须在商户WIFI内执行此操作方有效,于是用户等到某天来到该商户AP网内,再次打开微信,点击之前的“一键上网”链接,访问商户RADIUS服务器,radius服务器记录该用户的微信ID,MAC地址,比对之前的已关注微信ID表后放行该用户的联网行为。

场景3-终端用户取消关注商家公众号(无商家AP网内限制)

       用户A在任何公网WIFI环境下,登录微信,取消关注该商户公众号,该取消关注事件会通过腾讯服务器推送到商家服务器上,商家服务器标注该微信ID关联的终端MAC地址,使得该终端在商户AP下的上网行为被限制。
        作为商家,搞这么多服务器实在太麻烦,所以现在市场上的微营销平台都将微网站功能平台化,每个入驻商户 分配个子域名,有现成的类似CMS系统或者模板给商家展示各种广告,商品信息等。RADIUS服务器有的集成在AP路由器里,有的则是微营销平台提供的统一服务器,并且都给商户提供了配置管理的界面,对于商户来说,你只用买他们的AP路由器,交会费入驻他们的微营销平台,注册个公众号并做一些简单的配置就可以了。

        本人所接手的项目由于AP限制,是需要点击“一键上网”链接实现oAuth Web认证.题主所给的设备中描述只要关注后直接认证上网,无需点击“一键上网”按钮。本人猜测应该是无线AP会针对未认证WIFI终端进行数据包分析,抓取“关注公众号“的微信请求数据报,从而得到MAC地址,用户微信ID,关注商户ID等信息,再访问远程权限控制服务器,查询该商户微信ID,用户微信ID是否已匹配入库,如果是的话就放行该MAC地址的终端。


基本认证流程:

  • 用户设备(手机、Pad、笔电)连接到Wi-Fi热点

  • 提供热点的终端节点(路由器/AP)上的WiFiDog拦截用户网络,将用户HTTP请求转向到云端AC服务器

  • (可跳过)云端AC服务器返回网页提醒用户进行认证

  • (可跳过)用户在网页或APP里完成认证(开放认证、粉丝认证、自主或定制认证)

  • 云端AC服务器通知终端节点放行

抛开更多技术细节,主要补充说明:

如何判断当前用户是否关注了商户的微信公众账号?

为了避免太复杂的描述,以下讨论的前提是该商户的微信公众账号启用开发者模式并接入相应的接口实现服务器(一般由我这样的商业公共WiFi服务的第三方提供,或者我的客户),实现思路主要有两种: 

  1. 不需要使用微信公众平台高级接口(思路:用户能与本公众账号互动,就说明已经关注)
    用网页、水牌、桌贴等提示用户关注商户的微信公众账号,然后分两种情况:
    A. 用户刚刚关注,服务器在用户关注时自动下发的信息(一般是多图文,当然也可以要求用户发“上网”关键字),其中有一条目的是引导用户点击,例如“点此免费使用WiFi”——该条目对应的url里带了一个对应该设备(用户)的唯一的、一次性的token——用户点击该链接后转到对应的页面——此时服务器从链接中获得了这个token——服务器通知AP(放在商户现场的路由器)放行该设备(用户);
    B. 用户曾经已经关注过,请对该商户的微信公众账号发送某个关键字,如“上网”,或在商户微信公众账号菜单中点“上网”——服务器返回图文信息,其中有一条引导用户点击,后续同A
    ——核心思路:用户只要能和商户的微信公众账号互动,就意味着已经关注了该商户。因此,只需要将商户微信公众账号设为开发模式,并接入到相关服务器即可,不需要开通高级接口。

  2. 使用微信公众平台高级接口
    又分为两种情况:
    A. 调用用户信息接口 获取用户基本信息(UnionID机制) (参考上文,此为无用的方案)——与上文区别不大,只不过通过调用接口判断是否是粉丝——可是,也需要用户至少一个操作来获取OpenId——既然交互了、能获取OpenId了,说明用户已经关注本公众账号,还需要调用接口么?
    B. 调用OAuth-Basic接口 网页授权获取用户基本信息(注意:必须是在微信内嵌浏览器中,而且只有服务号有权限):用户浏览器访问网页的请求被智能WiFi拦截并强制转向到商户的手机门户——在商户的手机门户的页面中加入对微信高级接口之OAuth-Basic的调用,获得当前用户(注意:对应当前商户微信公众账号)的OpenId——然后在服务器端保存的该商户的粉丝列表里匹配是否已有对应项——已有,服务器通知AP(放在商户现场的路由器)放行该设备(用户)——额外地,服务器端需要通过微信公众平台的粉丝关注和取消关注接口来维护粉丝OpenId的列表

其实,如果结合自身特点考虑好产品定位、再换一种设计思路,路由器硬件、固件都不是问题

  1. 终端无关:无论终端设备使用的是开源系统和固件如DD-Wrt、Open-Wrt,还是极路由等,前者有WiFiDog,后者可以做插件,但到了WiFi接入和认证服务器、Portal(门户和具体应用)服务器都是一样的——也就是说可以兼容任何终端设备(AP、胖AP、AC);

  2. 简化认证模型,Radius无关:没有使用Radius认证,同上,我们封装了一套Web API,无论任何终端设备中的WiFiDog或者极路由插件等,通过Http/Https与接入和认证服务器通讯,随后由Portal服务器接管以进行业务判断、提供更丰富的内容和应用;

  3. 支持不同级别的漫游:一般都支持AC内的若干AP间漫游(比如×××、电影院),额外可以支持同一商户的不同路由器/胖AP(节点)之间漫游(比如更大的ShoppingMall、机场、旅游景区),当然,甚至可以支持商户之间的漫游——取决于业务需求。只是,好的设计让你可以很简单实现,不那么好的设计会比较累吧;

  4. 与现有产品可以很快速、简单集成——WiFi接入管理和认证的系统,与Portal系统(手机网站、具体业务)分离,后者可能是第三方(比如我们的客户)自己的系统,提供了各种特色的内容、服务,必须让他们可以很快速、简单的在已有产品中加入和对接智能WiFi;

  5. WiFi接入和认证服务器可以和第三方认证服务器对接:比如,有***想采用我们的系统并且与我们开展商盟的联盟营销方面的合作,但总部推荐了另外的技术公司。考虑到银行营业厅的特殊性、采集数据的价值,我们建议他们采用总部推荐的技术公司的产品(利益问题),但可以对接数据或者接口。同理,可对接大型商场已有的WiFi,甚至运营商的CMCC、ChinaNet——考虑清楚自己的核心优势是什么?技术?no, no,有核心优势外加终端无关,一样可以推翻之前使用的别家的产品重来(有没有必要罢了);

  6. MAC地址无关:MAC地址不是商业公共WiFi的核心诉求,别走偏了。MAC地址固然好,类似于Cookie,能唯一标识一个“设备”(设备可能会更换,也可能有多个)。但是如果没有MAC地址是不是就什么也不能干了?不是滴,核心在于通过用户的各种数据拼碎片,MAC地址是其中比较好用的一种罢了;

  7. 个人坚持不碰无线射频探测:好嘛,还是冲着MAC地址来的,呵呵。上面说了,我们的产品设计思路与MAC地址无关,不是没能力实现MAC Sniffer而是存在相当大的隐私泄露方面社会事件和法律相关风险。