天天看点

Cookie,Session,JWT,Token 区别解析

cookie,session,token,jwt

基本概念

  • 认证
    • 证明你是你自己,验证身份
  • 授权
    • 用户授予第三方访问用户的资源权限
      • 小程序,应用等获取手机上的权限
  • 凭证
    • 认证,授权,媒介
      • 身份证,网站游客模式,用户模式的令牌

cookie

http无状态协议,客户端与服务器进行会话,不会保留会话信息,如果需要跟踪访问者的身份证信息,需要将会话状态进行把保存,通过维护cookie或者session来做到。

cookie是服务端发送至浏览器上存在浏览器内的一小块数据,在下一次发送时会携带。

cookie不可跨域,但在一级域名和二级域名之间允许相互使用。domain属性。

cookie属性,键值对来存储内容,domain域名,哪个路径下生效用path,maxAge失效时间,expires过期时间,secure,加密传输(如果true,在https下才有效).httpOnly,无法通过JS脚本读取Cookie信息,还是能过通过Application中手动修改信息,一定程度上防止xss攻击

session

另一种记录客户端和服务器会话状态的一种机制。

session基于cookie实现,session是存储在服务器端,sessionid是存储到客户端的cookie中。

  • 流程
    • 第一次请求服务器,服务器根据提交的信息创建Session
    • 请求返回将Session的唯一标识SessionId返回给浏览器
    • 浏览器接收到SessionId信息后,会将该信息存入Cookie中,同时记录Cookie此SessionID属于哪个域名
    • 第二次请求服务器时,查看该域名下是否存在Cookie,存在Cookie自动也将其信息发送给服务器,服务器从Cookie中找到SessionID,再根据SessionId查找对应的Session信息,如果没有就是没有登陆或者登陆失效,如果找到就可以继续操作。

区别:

  • 大小cookie4kb,session最多一个浏览器一般是20个,默认不超过1024kb
  • 安全性,存在客户端 一个存在服务端
  • 存储类型,cookie时字符串,Session可以时任意类型
    • 有效期,Cookie可以时长时间保存,Session在浏览器清除cookie或者Session超时的情况下都会失效。

Token

访问资源接口API所需要的资源凭证

简单组成:uid用户唯一身份标识,time当前时间戳,sign签名,token前几位哈希算法压缩成的十六进制字符串

  • 过程:
    • 客户端使用用户名,密码登陆
    • 服务器验证请求,验证是否成功,将用户信息生成token返回给客户端
    • 客户端接收到token将其存在本地的cookie或者localstorage中
    • 客户端在每一次请求时,都将token携带
    • 服务器接收到请求,验证客户端携带的token,如果成功就向客户端返回请求的数据
  • 服务端不需要存token通过解析token的时间来换取session 的存储空间,减轻服务器压力

Refresh Token

  • 通过RefreshToken来更新AccessToken,通常RefreshToken的时间长于AccessToken,当AccessToken失效以后,通过RefreshToken来重新获取新的Token,如果RefreshToken也失效了,用户只能重新登陆

区别:

  • session服务端状态化,记录会话信息,token令牌,服务端无状态话,不会存储会话信息。
  • token更安全,有签名,防止监听以及重放攻击,Session以来链路层保证安全

JWT

跨端认证解决方案

授权认证机制

过程:

  • 用户输入用户名密码登陆认证成功,返回一个JWT
  • token保存本地
  • 用户需要在请求头Authorization中使用Bearer添加JWT

JWT不使用Cookie,不存在跨域问题,用户状态不再存储在服务器内容中是无认证机制。JWT是自包含,减少了查询数据库的需要。

区别:

  • token需要查询验证用户信息,JWT是Token和Payload加密存储在客户端中,服务器只需要通过密钥解密验证,校验也是JWT自己实现的,不需要查询或者减少查询数据库

引用参考:https://juejin.cn/post/6844904034181070861#heading-22