1. 什么是身份认证

身份认证又称身份验证或者鉴权,是指通过一定的手段,完成对用户身份的确认。
比如: 手机验证码登录、邮箱密码登录、二维码登录等等。

2. 不同模式下的身份认证

  • 服务端推介使用Session认证机制
  • 前后端分离推介使用JWT认证机制

    3. 前期知识

    3.1 HTTP协议的无状态请求

    HTTP协议的无状态性, 指的是客户端的每次HTTP请求都是独立的, 连续多个请求之间没有之间的关系,服务器不会主动保留每次HTTP请求的状态。
    clipboard.png

    3.2 什么是Cookie

    cookie是存储在用户浏览器中的一段不超过4kb的字符串。它由一个名称(Name)、一个(Value)和其他几个用于控制Cookie有效期安全期适用范围的可选属性组成。
    不同域名下的Cookie各自独立, 每当客户端发起请求时,会自动当前域名下的所有未过期的Cookie一同发送至服务器。
    Cookie的几大特性:

  • 自动发送

  • 域名独立
  • 过期时限
  • 4KB限制

    3.3 Cookie在身份认证中的作用

    客户端第一期请求服务器的时候, 服务器通过响应头的形式, 向客户端发送一个身份认证的cookie,客户端会自动将Cookie保存在浏览器中。
    随后, 当客户端浏览器每次请求服务器的时候,浏览器会自动将身份认证相关的Cookie,通过请求头的形式发送给服务器, 服务器即可验明客户端的身份。
    clipboard.png

    3.4 Cookie不具有安全性

    由于Cookie是存储在浏览器中的, 而且浏览器也是提供了读写CookieAPI, 因此Cookie很容易被伪造, 不具有安全性。 因此不建议服务器将重要的隐私数据通过Cookie的形式发送给浏览器。比如:身份信息、密码等等。

    3.5 Session

    客户端提交一个登录的请求, 将账号和密码提交给服务器进行验证, 验证通过之后, 登录就会成功。用户信息会存储在服务器的内存中, 同时会生成对应的Cookie字符串。通过请求头的形式将cookie发送给客户端, 客户端自动将cookie存储在当前域名下。
    客户端再次发送请求时, 通过请求头自动把当前域名下的所有可用的cookie发送给服务器。服务器根据请求头中携带的cookie,从内从中查找对应的用户信息。 用户信息认证成功之后, 服务器会根据当前用户生成特定响应内容。
    clipboard.png
    cookie VS session

  • cookie会保存在客户端的浏览器中

  • session会保存在服务器上。