web验证
++摘自《奇舞周刊》-《奇舞团资深前端教你,什么是Web验证》作者:韩永刚++
方案一:传统身份验证
注册
- 账号密码加密入库
登录
- 账号密码加密后与库中账号密码比对
- 一致则登录成功,不一致则失败
存在问题
- 登录环境不安全,账号输入时可能被监控
- 发送过程中可能被劫持
- 入库后可能被黑客攻击而泄露密码
本质问题:账号密码需要手动输入,且同一个账号密码可能注册多个站点,容易造成泄露
方案二:第三方登录
OpenID:开放认证协议——帮网站确认一个用户的身份
特点:
- 去中心化:任何网站既可以是身份提供者,又可以是身份使用者
- 在一个作为OpenID提供者的站点注册,eg:google
- 接入简单:将用户导向OpenID Provider的Entry并带上callback,只要用户同意认证,即可实现登录
- example.com ---向Google认证页面请求认证--> 同意认证,返回唯一标识
优点:
- 免去注册流程
- 客户端不再需要输入账号密码,降低安全风险
缺点:
- 依赖第三方平台,因此第三方平台的安全性很重要,牵一发而动全身
- 开放平台的稳定性不达标,可能影响使用
- 用户流失的风险
oAuth:开发授权协议——授权第三方在可控范围内访问用户资源
- 1.example.com ---请求授权-------> Google授权页面
- 2.example.com <--同意并返回code-- Google授权页面
- 3.example.com ---code换token----> Google服务
- 4.example.com <----返回token----- Google服务
- 5.example.com -携带token访问资源-> Google服务
- 6.example.com <---返回资源------- Google服务
方案三:双因素认证
使用两种及以上能够证明自己身份的方式进行验证
- 短信验证码、邮件验证码
- 动态令牌
- 认证APP,基于TOTP加密算法,利用应用与认证APP共同持有的种子秘钥,每隔30s生成一个新的6位验证码,应用与APP之间的验证码一致则完成验证。
- 登录确认的方式:不需要输入验证码,而是通过登录确认点击的方式来完成双因素认证的过程。通过公钥加密算法来确认你的身份,应用会生成一个秘钥对,私钥存储在本地,公钥发送给服务器作用用户信息存储,当用户进行登录操作时,服务器会用公钥加密一段信息发送到你的设备上,只有拥有正确私钥的设备才能解密并完成二次认证。
方案四:WebAuthn(web验证的未来)
- 由W3C万维网联盟发布的Web标准
- 提供一系列标准化的协议,让用户告别过去繁琐且不安全的账号密码登录方式,以实现安全的无密登录体验为目的。
- 允许用户直接使用设备的指纹识别、面部识别、虹膜识别、声音识别、实体秘钥(usb连接、蓝牙连接、NFC连接)等方式来进行登录验证。