Tower 如何使用微信实现二次认证

Tower 如何使用微信实现二次认证

徐峥徐峥
互联网时代黑客凶猛,直到今天,仅仅在乌云平台上公开的漏洞已经达到了19434个,我相信很多冲浪者在今天就算没有被爆菊,也至少被脱过裤了。

在企业软件领域,安全问题更是备受重视,因为用户每天都在提交大量的事关企业发展的敏感数据,这些数据一旦泄露,对用户、对企业软件提供商,都是一场灾难。正是因为数据安全如此重要,于是大量的安全相关的技术手段被应用于企业软件领域,诸如SSL加密、异地实时备份、数字安全证书、与第三方安全平台合作等等,可以说,在如何使企业软件更加安全的道路上,我们根本看不到尽头。

但是安全有时候会和用户体验产生矛盾,比如说曾经令人抓狂的支付宝安全证书,还有目前大多数只能在IE下使用的网银系统,所以对于互联网形式的企业软件而言,安全问题就不仅仅是只是安全问题了。如何在安全和体验上取得平衡,是每一个互联网产品探索的方向,在这里,跟大家分享一下关于登录二次认证,Tower 是如何设计的。

0.什么是二次认证

前面也说过,我们在互联网上的账号,如果不出意外的话,大概总有那么一两个已经落入敌手,黑客们会搜集各处汇集来的账号形成他们自己的一个账号库,除非我们每个账号都使用不同的密码,否则黑客使用这些账号密码,就能登录某一个你常用的系统。

为了防止这种情况发生,很多对安全性要求较高、用户数据非常敏感的互联网产品都会引入一种二次认证方式,比如 Evernote、QQ 企业邮箱、Github、支付宝等等,这些有广泛用户群的产品都支持二次认证。


简单的来说,二次认证就是在使用用户名密码登录的基础上,额外对用户的账号提供一层保护,这样黑客就算掌握了你的某个互联网产品的用户名和密码,他也没法进入系统窃取你的资料。

1. 目前常用的二次认证方法

最为常用的二次认证方式就是手机短信了,比如 Github 的二次认证。

在 Github 的网站上,你可以在个人设置页面通过输入你的手机号来激活账号的二次认证,这样在使用用户名密码登录 Github 网站以后,Github 会发送一条短信到你绑定的手机号上,这条短信会携带 4 位随机数字,你需要在 Github 系统上输入收到的这 4 位随机数字才能真正登录进入系统。

另外移动互联网时代的到来,产生了另外一种二次认证方式,那就是移动宝令,比如支付宝的支付宝令。

首先我们需要在智能移动设备上下载一个支付宝宝令 APP,然后在这个 APP 中开启你的支付宝账号的宝令二次认证,这样在每次支付之前,支付宝都会在这个宝令 APP 中产生一个 4 位随机数,你必须打开你的智能设备上的支付宝宝令,获取这 4 位数字,才能真正进行支付。

在短信抵达率一直是个问题的今天,移动宝令在智能设备上的使用就显得尤为方便,正是因为这样,Google 甚至发布了一套公开的解决方案 Google Authenticator,我们熟悉的 Evernote 就是使用这一套解决方案来实现它的二次认证机制的。


除了这两种二次认证外,腾讯企业邮箱的二次认证不得不算是一个「另类」。

背靠拥有 6 亿用户的微信,腾讯企业邮箱的二次认证完全使用这个「全民APP」的渠道,在开启二次认证的时候,直接绑定的是你的微信账号,需要二次认证的时候,会通过微信的方式发送随机验证码,这样你无需下载额外的专用宝令,就能达到二次认证的目的了。

2. Tower 的二次认证

我们在综合体验了目前互联网行业常用的二次认证方式后,一致认为使用微信这个渠道会优于短信和宝令 APP,使用微信推送二次认证码,既没有抵达率的隐患,也不需要用户去额外安装一个八百年也用不到的宝令 APP,而微信如此庞大的用户数也帮助我们率先解决了覆盖率的问题,可谓完美。不过理想丰满,现实骨感,实际的设计过程还是遇到了不少问题,我们现在就来看看。

首先我们需要解决的是在 Tower 系统中对微信账号的绑定,很自然的,我们想到的是微信公众账号,我们可以使用微信公众账号作为绑定的载体,用它来连接用户的微信账号和 Tower 账号。

绑定的方法异常简单,在 Tower 的个人设置页面,点击「双保险」旁边的「开启」链接,输入你的登录密码,会出现一个二维码。

使用你的微信扫码功能,扫描这个二维码后,会自动将你的微信账号和 Tower 账号进行关联,你会在微信里的 Tower 公众账号中收到一条绑定成功的消息,也能在个人设置页面看到绑定成功的提示。

接下来就是,在用户登录的时候,如果开启了双保险,应该向用户的微信公众号里推送一条验证码,不过这里遇到了第一个坑,那就是微信公众号限制了每天只能向用户主动推送一条消息,这样显然不能满足我们的需求。

抠了一阵脑袋后,我们想到了一种解决方案,那就是在用户登录之后,显示一张二维码,用户使用微信扫码工具扫描这个二维码的时候,微信会向我们的服务器发送一条验证信息,告诉我们说:「微信用户某某正在试图登录系统」。

然后我们的服务器会判断这个微信用户是否和当前正在登陆的 Tower 用户绑定,如果是,则二次认证成功,用户的浏览器会自动跳转登录进入系统。

不得不说,这个体验真是赞爆了!用手机扫码后,浏览器自动登录,真是太高科技了,一切好像都很完美,直到我们想到,移动客户端怎么办?

移动互联网在给大家的生活带来方便的同时,也给程序猿和产品经理带来了很多麻烦。我们再也不能像以前一样,看看电脑浏览器里的效果后,就能悠闲地泡一杯咖啡一边玩儿去了,现在我们在每一个功能开发的时候,不得不面对移动客户端的适配问题。

扫码在电脑浏览器上是方便的,但是手机上不可能这么干,你不能指望用户再去找一台移动设备,登录他的微信账号,然后用一台手机去扫描另一台手机上的二维码。


于是我们继续抠了一阵脑袋,想到了一招。微信虽然限制公众账号向用户主动推送消息,但是如果用户自己先向微信公众号发送一条消息,那么公众号就能挣脱企鹅的枷锁,向用户发送消息了。

因此,如果用户在移动设备上登录 Tower 后,我们会显示一个输入框,并提示用户打开微信的 Tower 公众账号,在公众账号里点击「芝麻开门」按钮,这时就相当于用户向公众号主动发送了一条消息,这时候公众号会向服务器索取一个验证码,用户回到 Tower 移动客户端,输入这个验证码,验证成功。

另外,你也可以直接在微信公众号里发送「芝麻开门」四个字,来获取移动客户端双保险验证码。现在就去注册 Tower 试试吧~

3. 结语

二次认证对于很多人来说,也许只是一个锦上添花的小东西,但是对 Tower 来说,安全无关小事,体验无关小事,任何一个功能的设计和开发都值得仔细打磨和推敲,唯有这样,我们才能无愧于每一个交到用户手上的产品功能,如同老罗所说,输赢虽无法确定,认真还是可以做到的。

21 条评论