JWT学习

  • 什么是JWT
    • JSON Web 令牌 (JWT) 是一种紧凑的 URL 安全方法,用于表示要在双方之间传输的声明。JWT 中的声明被编码为 JSON 对象,该对象用作 JSON Web 签名 (JWS) 结构的有效负载或 JSON Web 加密 (JWE) 结构的明文,从而使声明能够进行数字签名或使用消息身份验证代码 (MAC) 和/或加密进行完整性保护
  • 传统session流程
    • 1)浏览器发起登陆请求
    • 2)服务端验证身份,生成身份验证信息,存储在服务端,并且告诉浏览器写入cookie中
    • 3)浏览器发送请求请求,携带cookie 内容发送到服务器端
    • 4)服务器发现cookie中的用户信息,进行身份验证
    • 5)服务器返回用户需要的数据
  • JWT工作流程
    • 1)浏览器发起登陆请求
    • 2)服务器端验证用户身份,根据算法将用户标识符打包生成token,并返回给浏览器
    • 3)浏览器再次发送请求时,携带上面生成的token一起发送给服务器
    • 4)服务器获取发送来的token并进行验证
    • 5)返回用户需要的数据
  • JWT和Session的区别
    • 1)session 存储在服务端占用服务器资源,而 JWT 存储在客户端2)session 存储在 Cookie 中,存在伪造跨站请求伪造攻击的风险3)session 只存在一台服务器上,那么下次请求就必须请求这台服务器,不利于分布式应用4)存储在客户端的 JWT 比存储在服务端的 session 更具有扩展性
  • JWT工作原理
    • 数据格式
      • JWT生成的token串由三部分组成,中间以"."进行分割。header.payload.signature
      • header
        • 承载两部分信息
          • alg:声明加密使用的算法
          • typ:声明类型
      • payload
        • 承载有效的JWT数据包,包含三部分
          • 标准声明
            • 标准声明的字段
          • 公共声明
            • 公共声明的字段
            • 公共声明字段可以添加任意信息,但是因为可以被解密出来,所以不要存放敏感信息
          • 私有声明
            • 私有声明的字段
      • signature
        • 签证信息,通过header和playload,加上secret通过算法加密生成
        • 生成公式
          • signature = 加密算法(header + "." + payload, **)
  • token过期时间如何确定
    • payload 中有个标准字段 exp,明确表示了这个 token 的过期时间.服务端可以拿这个时间与服务器时间作对比,过期则拒绝访问。
  • 如何防止token被篡改
    • 由于header和payload都是可能被解密为明文的,所以在服务器端可以依赖signature验证是否被篡改过
  • 如何提高JWT的安全性
    • 1)缩短 token 有效时间;
    • 2)使用安全系数高的加密算法;
    • 3)token 不要放在 Cookie 中,有 CSRF 风险;
    • 4)使用 HTTPS 加密协议;
    • 5)对标准字段 iss、sub、aud、nbf、exp 进行校验;
    • 6)使用成熟的开源库,不要手贱造轮子;
    • 7)特殊场景下可以把用户的 UA、IP 放进 payload 进行校验(不推荐)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值