Cookie,Session,Token,JWT

几个概念?

  • 什么是认证?
    • 认证用户身份
      • 人脸识别登录
      • 账号密码登录
      • 验证码登录
  • 什么是授权?
    • 用户授予第三方应用访问某些资源和权限
      • 比如:登录app会弹出询问是否允许app获取相关权限(访问相册,地理位置)
      • 实现授权的方式有:cookie,session,token,OAuth
  • 什么是凭证?
    • 实现认证授权的前提,一种证书,用于验证身份的媒介
      • 可以认为是你的身份证
      • 证明你学历的毕业证和学位证

cookie

  • 什么是cookie?
    • cookie是保存在客户端的纯文本文件,如txt,也可以说是一门客户端缓存技术,用于保存客户端请求信息
  • cookie的作用
    • 存储会话信息,跟踪会话状态,联系浏览器和服务器
  • cookie的优点
    • 存储会话信息可以用于跟踪会话状态
    • 保存在浏览器,数据小,不会对服务器造成压力,提升了访问速度
    • 可以长时间持续,也可以短时间持续(基于过期时间的设置)cookie可长可短,session一般较短

session

  • 什么是session
    • session是一门服务端会话缓存技术,,用于存储一次性会话的多次请求的数据
  • session的作用
    • 存储会话信息供浏览器后续请求使用可以获取并修改变量的值,和cookie一起使用识别同一个客户
  • session的优点
    • 相比于JWT,最大的优势是可以主动清除session
    • session保存在服务端相安全
    • 结合cookie使用,较为灵活兼容性好

cookie和session的相同点和不同点

相同点

  • 都可以保存用户信息
  • session的使用要求浏览器支持cookie如果浏览器不支持或禁止使用cookie,则session不能使用
  • 用户访问时,服务器创建或查找session生成session并传给浏览器,浏览器将其保存在cookie中一并放入内存,也可以认为cookie是session在浏览器的标识

不同点

  • 安全性:session比cookie安全,session存储在服务端,cookie存储在客户端
  • 存取值的类型不同:cookie支持字符串类型,如果要设置其他类型需要将其转换成字符串,session可以存储任意类型
  • 有效期不同:cookie可以设置长时间保持,比如我们经常使用的默认登录功能session一般失效时间短客户端关闭(默认情况下)或session超时都会失效
  • 存储大小不同,单个cookie保存的数据不能超过4K,session可存储数据远高于cookie,但访问量过多会占用服务器资源
  • 保存状态的方案不同:cookie是在客户端保存,session是在服务端保存

Token

  • 什么是token?
    • token是服务端生成的一串字符串,一座客户端进行请求的令牌,访问资源接口(API)时所需要的资源凭证(身份证),当第一次登录后,服务器生成一个token便将此token返回给客户端,以后客户端只要带上这个token前来请求数据即可,无需再次带上用户名和密码
  • token的作用?
    • 用来做身份验证
    • 节省服务器内存
    • 数据签名防伪造攻击

token的优点

  1. 服务端无状态化、可扩展性好

    • 在客户端存储的Tokens是无状态的,并且能够被扩展。基于这种无状态和不存储Session信息,负载负载均衡器能够将用户信息从一个服务传到其他服务器上。如果我们将已验证的用户的信息保存在Session中,则每次请求都需要用户向已验证的服务器发送验证信息(称为Session亲和性)。用户量大时,可能会造成 一些拥堵。但是不要着急。使用tokens之后这些问题都迎刃而解,因为tokens自己hold住了用户的验证信息。
  2. 支持移动端设备

    • Tokens能够创建与其它程序共享权限的程序。当你的客户端是一个原生平台(iOS, Android,Windows 8等)时,Cookie是不被支持的(你需要通过Cookie容器进行处理)
      这时采用Token认证机制就会简单得多。
  3. 安全

    • 请求中发送token而不再是发送cookie能够防止CSRF(跨站请求伪造)。即使在客户端使用cookie存储token,cookie也仅仅是一个存储机制而不是用于认证。不将信息存储在Session中,让我们少了对session操作。token是有时效的,一段时间之后用户需要重新验证。我们也不一定需要等到token自动失效,token有撤回的操作,通过token revocataion可以使一个特定的token或是一组有相同认证的token无效。
  4. 支持跨域访问

    • 我们提前先来谈论一下CORS(跨域资源共享),对应用程序和服务进行扩展的时候,需要介入各种各种的设备和应用程序。而Cookie是不允许垮域访问的(垮域访问:两个域名之间不能跨过域名来发送请求或者请求数据)
  5. 性能

    • 一次网络往返时间(通过数据库查询session信息)总比做一次HMACSHA256计算 的Token验证和解析要费时得多.
      (内存型的session另说)
  6. 解耦

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

 

  • 什么是JWT? 
    • json web token,它定义了一种紧凑且自包含的方式,以JSON对象的方式在各方之间安全地传输信息,因为是基于数字签名所以可以进行验证和信任,常用的算法比如有HMAC、RSA等等。

对比token和JWT

  • 相同点
    • 都是访问资源的令牌
    • 都可以记录用户信息
    • 都是使服务端无状态话
    • 都是只有验证成功后,客户端才能访问服务端上受保护的资源
  • 不同点
    • 服务端验证客户端发来的token信息要进行数据的查询操作;
    • JWT验证客户端发来的token信息就不用, 在服务端使用密钥校验就可以(校验也是 JWT 自己实现的),不需要查询或者减少查询数据库,因为 JWT 自包含了用户信息和加密的数据。

  

posted @   寒无衣  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示