黑马十次方项目day06-05之常见的认证机制与token验证的优势

有状态登录与无状态的登录

服务器端要存储登录状态信息, 叫做有状态的登录.
服务器端不需要存储登录状态信息,叫做无状态的登录.

常见的认证机制

HTTP Basic Auth

HTTP Basic Auth 每次请求时,都要带上用户名和密码.
这种方式比较的low, 并且有把用户名和密码带给第三方的风险.
但是这种认证机制是无状态的,

Cookie Auth

把登录的信息, 在浏览器端存入cookie中, 在服务器端,存入session中.
在cookie和session中,如果认证的信息一致, 那么就代表登录成功.

此认证方法的复杂之处在于, 在浏览器和服务端都存储了登录的信息.
而且还依赖于cookie. 使用cookie的缺点在于, cookie不安全.

并且cookie只存在于电脑端的浏览器中, 在移动端是没有cookie的.

OAuth

OAuth(开放授权)是一个开放的授权标准,允许用户让第三方应用访问该用户在
某一web服务上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和
密码提供给第三方应用。

Token Auth

Token 类似于带着皇上的尚方宝剑, 有了此token, 就有通行证,可以访问数据.

生成的token是在java虚拟机端生成的, 验证token,也是在java虚拟机端验证的.
这样就比验证session, 少了一步.
在token里面,需要加一个唯一的标识.

使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是
这样的:

  1. 客户端使用用户名跟密码请求登录
  2. 服务端收到请求,去验证用户名与密码
  3. 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
  4. 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里
  5. 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
  6. 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向
    客户端返回请求的数据
    黑马十次方项目day06-05之常见的认证机制与token验证的优势

Token Auth的优点

Token机制相对于Cookie机制的好处

  1. 支持跨域访问: Cookie是不允许垮域访问的,这一点对Token机制是不存在的,前提
    是传输的用户认证信息通过HTTP头传输.

  2. 无状态(也称:服务端可扩展行):Token机制在服务端不需要存储session信息,因为
    Token 自身包含了所有登录用户的信息,只需要在客户端的cookie或本地介质存储
    状态信息.

  3. 更适用CDN: 可以通过内容分发网络请求你服务端的所有资料(如:javascript,
    HTML,图片等),而你的服务端只要提供API即可.

  4. 去耦: 不需要绑定到一个特定的身份验证方案。Token可以在任何地方生成,只要在
    你的API被调用的时候,你可以进行Token生成调用即可.

  5. 更适用于移动应用: 当你的客户端是一个原生平台(iOS, Android,Windows 8等)
    时,Cookie是不被支持的(你需要通过Cookie容器进行处理),这时采用Token认
    证机制就会简单得多。

  6. CSRF:因为不再依赖于Cookie,所以你就不需要考虑对CSRF(跨站请求伪造)的防
    范。

  7. 性能: 一次网络往返时间(通过数据库查询session信息)总比做一次HMACSHA256
    计算 的Token验证和解析要费时得多.

  8. 不需要为登录页面做特殊处理: 如果你使用Protractor 做功能测试的时候,不再需要
    为登录页面做特殊处理.

  9. 基于标准化:你的API可以采用标准化的 JSON Web Token (JWT). 这个标准已经存在
    多个后端库(.NET, Ruby, Java,Python, PHP)和多家公司的支持(如:
    Firebase,Google, Microsoft).