总结:WEB服务鉴权

一、背景

之前小组同事分享了安全方面的知识,在优化相关功能时,有个接口多加了一层认证,但是认证方式很多,我当时使用了数字签名认证的方式,今天梳理下认证相关的知识。

二、传统身份验证方式

注册

  • 前端注册页面填写用户名和密码表单,发送给后台服务器
  • 后台服务器将接收到的用户名和密码进行加密并插入到数据库,然后回馈是否成功的信息给前端页面。

登录

  • 前端登录页面填写用户名和密码表单,发送给后台服务器
  • 后台服务器将接收到的用户名和密码进行加密后与数据库储存信息进行对比,如果账号密码一致则返回给前端登录成功信息,不一致则返回失败信息。

这种做法存在普遍问题

  • 当登录环境不安全时,输入密码时可能被监控
  • 发送密码到服务器的过程中可能被劫持
  • 密码存储在数据库如果被黑客攻击可能造成大量密码泄露

这种做法最大的问题在于你需要输入密码

  • 人们通常使用一个密码应对所有账号,而攻击者获取密码的方式又数不胜数,一旦在某个疏于防备的瞬间泄露了一个密码,那么该用户所有账号都将面临巨大安全风险

五、双因素认证

1、介绍

阿里云和华为云都对账号开通了双因素认证,即除了账号密码之外,还需要一个第三方实时生成的验证码。

其实双因素认证早在十几年前就已经开始应用,诸如短信验证码、邮件验证码、动态令牌、RSA电子动态令牌等都属于双因素认证。各大网银广泛使用的各种盾、各种 Key 其实也属于双因素认证,包括短信验证码,它能够让用户的数据多一层保护。

2、常见的双因素认证方法

  • 第一种是短信验证,也是目前较为常用的,每一次认证时会生成短信验证码发送到指定手机上,输入的内容与发送的内容一致则完成认证。
  • 第二种是认证APP,基于TOTP的加密算法,利用应用与认证APP共同持有的种子密钥,每隔30秒生成一个新的6位验证码,应用与APP之间的验证码一致则完成验证,通常在公司内部使用的VPN就是采用这种方式来进行身份验证。
  • 第三种是登录确认的方式,这种方式不需要输入验证码,而是通过登录确认点击的方式来完成双因素认证的过程,这种方式是通过公钥加密算法来确认你的身份,应用会生成一个密钥对,私钥存储在本地,公钥发送给服务端作为用户信息存储,当用户进行登录操作时,服务端会用公钥加密一段信息发送到你的设备上,只有拥有正确私钥的设备才能解密并完成二次认证。

优点

  • 必须通过两种及以上的验证才能确认身份,安全性较高

缺点

  • 使用门槛变高,登录多了一步,费时且麻烦,不有利于产品的广泛传播
  • 2FA 不意味着账户的绝对安全,入侵者依然可以通过克隆SIM卡、盗取cookie或token等方式进行攻击
  • 一旦忘记密码或者遗失手机,想要恢复登录,势必就要绕过双因素认证,这就形成了一个安全漏洞。除非准备两套双因素认证,一套用来登录,另一套用来恢复账户。

六、Web验证的未来 WebAuthn

WEB验证的过去现在与未来 - 知乎

你可能感兴趣的:(Java,分布式系统,WEB验证,鉴权)