问题5:验证码是最好的解决方案吗?
解决了“证明我是人”后,接下来的问题就是“证明我是我”。
在密码找回场景下,涉及到“证明我是我”的具体情况如下:
- 用户忘记密码,目标是尽快登录 or 修改密码
- 陌生人试图修改用户密码,目标是将威胁及时告知用户,并让陌生人无法轻易修改密码
- 用户账号被盗,密码已被陌生人修改,目标是尽快让陌生人无法操作账户,并让用户有办法修改密码
用户在第一个场景中不需要额外的验证过程,需要的是尽快登录和修改密码。第二个场景中涉及到了权限和通知设计,第三个场景中则需要设计后门。
本质上通知和验证是一体的,因为用于通知的媒介也是事先经过验证的。无论权限、后门,还是通知,核心都是对身份的验证:是我/非我,非常简明的权限结构(不讨论超级管理员)。
对身份进行验证的一般策略是:线索约定、模式识别。线索约定策略中包括:个人拥有的通信服务、个体特征、第三方证明、公共服务。模式识别策略通常会主动收集当前使用信息与历史记录进行比对。
举几个线索约定策略的例子:
- 个人通信服务:手机号码、电子邮箱、设备系统级别推送、私人信件
- 个体特征:指纹、面孔、声音、虹膜、社会关系、个人经历
- 第三方证明:信用、工作证明、身份证件、银行信息、二维码等
- 公共服务:组织的公开紧急联系方式
不同的密码找回场景中,验证策略的设计原则是:随着用户处境的紧急程度逐渐升高,验证过程中的沟通复杂程度也逐渐变大。
个体特征和第三方证明验证的使用场景都比较特别,用于安全优先级比较高的场景。由于手机号码、电子邮箱是当前应用最广、最贴近生活、使用最方便的通信方式,在密码找回场景的初期,目前的常用验证方式是:通过手机号码和电子邮箱进行验证。
当手机号码和电子邮箱无法正常使用,沟通就需要承载更多的信息,这个时候的方案有两种:通过提供第三方证明和个体特征等复杂程序来验证身份;通过人工服务与组织进行沟通。
那么就到了巅峰对决的时候了:短信验证、电话验证码、邮箱验证码、邮箱链接,哪个体验更优?
手机验证有三种方式:收到短信验证码并填写、主动发送验证短信(QQ,iOS 端)、电话语音接听验证码,它们的操作步骤如下:
- 被动收到短信验证码:点击发送验证码 - 等待并收到验证码 - 查看验证码并记忆 - 输入验证码 - 点击下一步 -
- 主动发送验证短信:复制短信内容 - 点击快速发送 - 跳转到短信界面并粘贴内容 - 发送短信 - 跳转回App界面 - 点击我已发送
- 接听电话验证码:点击发起验证电话 - 等待并接听电话 - 等待并记忆验证码 - 挂断电话并输入验证码 - 点击下一步
无论从操作步骤的多少、还是操作的复杂程度来看,主动发送验证短信的用户操作成本显然要高很多,说明它有具体的使用场景限制,如安全因素优先级比较高的场景。而电话验证的使用场景有两个特点:使用习惯、使用环境,如果用户习惯使用电话进行验证、或处于不太友好的视觉环境中,那么电话验证就会多一些优势。
对于被动收到短信验证码,如果用心设计验证内容文本,结合短信和邮件通知的预览功能,用户可以不跳出当前界面来完成验证任务,这几乎已经是当前体验最佳的权限问题解决方案了。
- 除了图中标明的两处设计缺陷,对比右侧可以发现 Facebook 通知的可读性更差:与中文阅读习惯不符;验证数字和引导词“验证码”的距离比较远,干扰对验证码的阅读。
- 关于可读性与个人隐私的权衡,有两个影响因素:不同产品特点决定用户收到的是快递还是保险箱;密码找回场景下,当前用户被默认为本人,可读性的权重要高于个人隐私。
邮箱验证也有两种方式:验证码、链接。它们的操作步骤如下:
- 邮箱验证码:点击发送验证码 - 等待并接收邮件通知 - 查看邮件内容并记忆验证码 - 跳转到 App/网页内 - 输入验证码 - 点击下一步
- 邮箱链接:点击验证 - 等待并接受邮件通知 - 查看邮件内容 - 点击链接
从操作步骤来看,链接验证方式要比验证码方式步骤更少;但从页面流程来看,用户在使用验证码方式时页面环境的变动更小。不过,经过对邮件通知和内容信息的优化后,免于点开邮件查看详情并跳转,验证码方式的操作步骤已经可以与链接方式相当,唯一的区别就是记忆验证码和页面跳转操作的区别。这时候,记忆验证码的方式看起来更优雅一些。
总结一下:
- 短信验证码、邮箱验证码适用于普通的密码找回场景
- 主动发送验证短信适用于安全因素优先级比较高的密码找回场景
- 接听验证电话适用于视觉环境不友好的场景和有相应操作习惯的人群(如老人、海外)