image.png

Session原理

  1. HTTP是一种无状态协议,每次服务器端接受到的请求都是全新的请求,session和cookie就是为了弥补HTTP的无状态
  2. Session是保存在服务器端的,客户端请求服务端,服务端会生成一个sessionId,并通过set-cookies响应头命令,向客户端发送要求设置的cookies,客户端会根据set-cookies讲sessionID保存在前端,下次请求的时候会带上sessionId
  3. 后端根据浏览器传过来的sessionId进行身份验证

Session缺点
加大服务器压力,服务器需要存储session
当A服务器存了session,A访问量激增,A做了负载均衡,将请求转发到B服务器,B服务器没有存储session,就会使请求失败

Cookie原理

cookie是服务器端通过Set-Cookies推送给浏览器的,浏览器会把cookie存储在本地,然后下次发请求会带上cookie.

cookie有两种类型,一种会话cookies,一个永久cookies.会话cookie储存在内存中,浏览器关闭后会丢失。持久cookie保存到磁盘,只有过期之后才会作废。

cookie属性

domain:cookie绑定的域名,如果没有设置,就会绑定到当前域
secure:设置为true,cookie只能在https等安全协议下传输
httpOnly: 设置为true,不允许js获取cookie,防止XSS攻击
sameSite: 来限制第三方Cookie。

JWT

token是一个令牌,浏览器第一次访问服务器的时候会签发一张令牌
TOKEN认证流程:

  1. 客户端用用户名和密码登录
  2. 2.服务器收到请i去,验证用户名和密码
  3. 验证成功后,服务器会签发一个TOken,一般token由用户信息,时间戳和加密算法的签名组成
  4. 客户端收到token之后把它储存下俩,比如放在cookie或者Local Storage里面
  5. 之后每次请求带上token
  6. 服务器验证token

session-cookie缺点

认证方式只局限于浏览器端,在app中无法使用cookie
在服务器分布式环境下,需要给每个服务器备份,增加服务器陈本
在http中使用cookie容易收到CSRF跨站点请求伪造攻击

token缺点

加密解密消耗,使得token认证比session-cookie更消耗性能
token比session大,站贷款

区别

  1. token不仅仅限于cookie,所以支持多端认证
  2. 不使用cookie可以避免CSRF攻击
  3. token不需要存储,token中包含了用户信息,服务器端变成无状态


    JWT
    JWT由header,payload和signature组成
    JWT支持跨域验证

    JWT缺点:

  4. 服务器是不保存状态的,所以JWT一旦生成是没有办法取消的

  5. JWT本身包含了认证信息,一旦泄密,就会被盗用,所以一般会设置一个比较短的有效期
  6. JWT一般配合https协议传输

单点登录

多个系统只需要登录一次就可以
需要有一个SSO认证中心
系统A在SOO认证成功
系统B再登录的时候,会转发到SSO认证中心,如果认为已经登录过了,就不用重新登录