JWT 和 session验证

1:传统的session认证

  • http是一种无状态的协议,每次都得我们用户手动的去进行认证,根据http协议,我们并不知道当前的这一份请求是哪一个用户发出的,所以我们能够让我们的应用能够识别出来是哪一个用户发起的请求,我们只能在服务器端存放一份用户登录的信息,这份登录的信息在响应的时候会传递给浏览器,并且告诉他保存为cookie,以便下一次的请求的回收发送给我们的应用,这就是我们的session认证
  • 缺点
    • 内存受到限制,session放在内存中,随着用户的增多,性能会收到限制
    • 记录保存在内存中,在分布式的系统中,下一次的请求必须还要在这个服务器才能拿到资源,限制了负载均衡的能力
    • 基于cookie做识别的,如果cookie被篡改,很容易被攻击
    • 在前后端分离的系统中
      • CSRF,跨站伪造请求攻击,如果cookie被拦截,很容易被攻击
      • 用户的一次请求需要转发多次,如果使用sessionID,每次都要查询用户的信息,给服务器增加负担

2:JWT

  • 用户通过账号,密码进行登录,获得认证
  • 我们生成一个JWT返回给用户,同时JWT也会进行本地的保存
  • 每次访问的时候,携带JWT,我们拦截器会对JWT进行拦截
  • 如果成功,就执行响应的业务逻辑处理
  • 如果失败,则返回错误的信息

1:认证的流程

  • 账号,密码发送到后端的接口,http post请求
  • 后端核对后,将用户的ID和其他信息作为JWT payload,并且和头部进行base64的编码后签名,形成一个token。
  • token: head,payload,签名
  • 后端将jwt字符串返回给前端,前端可以保存在缓存中,退出的手删除
  • 前端每次请求的时候将JWT放在header中的授权位
  • 后端检查是否存在,如果存在验证他的有效性,和时效性

2:结构

  • 表头.payload.signature
  • 标头:当前的JWT类型和所使用的签名 HS256
  • 声明:用户和其他数据,同样使用base64的编码
    • 不要放比较敏感的信息
  • 签名:对前两部分做加密,HS256,保证JWT没有被篡改过

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值