cookie session token JWT 略解

cookie session token JWT 略解

首先要搞清以下三种

  • 认证
    • 验证当前用户的身份
  • 授权
    • 授权第三方应用访问该用户的某些资源
    • 实现授权的方式有 cookie session token OAuth
  • 凭证
    • 实现认证和授权的前提

什么是cookie

  • http无状态的协议(对应事务处理没有任何记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息)所以说,服务器无法分辨上一次的请求发送者和这一次的请求发送者是不是同一个人
  • cookie存储在客户端 他会在浏览器下次向同意服务器再次发起请求时携带并发送到服务器上
  • 不可跨域 每个cookie都会绑定一个域名 无法在别的域名下使用 一二级域名之间可以使用
  • cookie中包含了许多属性
    • name=value 键值对
    • domain 域名
    • path 制定cookie在哪个路径
    • 等等

什么是session

  • 储存在服务端

  • 记录服务器和客户端会话状态的机制

  • 基于cookie实现

  • 浏览器第一次向服务器发送请求时,服务器会创建一个session并返回一个sessionid 第二次请求时 需要携带cookie中的sessionid 服务器会根据seesionid判断对应=哪个用户

什么是token

  • 浏览器携带密码和账号请求服务器 服务器会将登录的凭证做一系列的加密后得到一串字符串作为token
  • 服务器返回token 浏览器会将token存储起来
  • 每次访问api都会带着token 服务器做解密和签名认证 判断有效性
  • 注意 token放到请求头中去
  • 基于token校验属于一种无状态的方式 服务器不会存放token数据 用解析token的时间换取session的存储空间 减轻服务器压力 减少频繁查询数据库

什么是JWT

JSON Web Token 目前最流行的跨域认证解决方案

  • 类似Token 浏览器首先输入账户密码请求服务端

  • 服务端使用秘钥创建JWT 但是在JWT中,存储了一些会话信息 例如用户的信息,所以减少了查询数据库

  • 颁发一个有效期极短的JWT 及时暴露了危险也很小 由于每次都会生成一个新的JWT 所以也没必要保存JWT 真正实现无状态

JWT问题

  • 因为JWT的最大优势就是不需要存储session,但是最大缺点也是因为不需要存储session导致在使用过程中无法废弃某个Token或者更改Token权限
  • 因为本身包含了认证信息 一旦泄露 人和人都有可能获得该令牌的所有权限 为了减少盗用 jwt的有效期应该设置比较短 对于重要的权限应该再次认证