【架构-12】JWT和Token

什么是Token?

Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

有效期多长合适呢?

为了解决在操作过程不能让用户感到Token失效这个问题,有一种方案是服务器端保存Token状态,用户每次操作都会自动刷新或推迟Token的过期时间------Session就是采用这种策略来保持用户登录状态的。然而仍然存在这样一个问题,在前后端分离、单页APP这些情况下,每秒钟可能发起多次请求,每次都去刷新过期时间会产生非常大的代价。如果Token的过期时间会产生非常大的代价。如果Token的过期时间被持久化到数据库或文件,代价就更大了。所以通常为了提升效率,减少消耗,会把Token的过期时间保存在缓存或内存中。

还有一种方案,使用RefreshToken,它可以避免频繁的读写操作。这种方案中,服务端不需要刷新Token的过期时间,一旦Token过期,就反馈给前端,前端使用Refresh Token申请一个全新的Token继续使用。这种方案中,服务端只需要在客户端请求更新Token的时候对Refresh Token的有效性进行一次检查,大大减少了更新有效期的操作,也就避免了频繁读写。当然Refresh Token也是有有效期的,但是这个有效期就可以长一点,比如以天为单位的时间。

什么是JWT?

JWT(JSON Web Token)是一个开放的标准,它定义了一种紧凑且包含的方式,用JSON对象在各方之间安全地传输信息。此信息是经过数字签名的,可以验证和信任。

JWT是Token的一种具体实现方式,其本质就是一个字符串,将用户信息存储到JSON中然后经过编码得到的字符串,用于web中数据的安全传输。

JWT由三部分组成,分别是Header(头部)、Payload(有效载荷)、Signature(签名),用点(.)将三部分隔开便是JWT的结构,形如xxxxx.yyyyyy.zzzzz的字符串。

  1. Header

JWT Header由两部分组成,是一个描述JWT元数据的JSON对象,alg属性表示签名使用的算法,默认为HAMC SHA256;typ属性表示Token的类型,统一写成JWT。

  1. Payload

    Payload是JWT的主体部分,保存实体信息,每一个字段就是一个声明(claim),JWT为我们提供了一些默认字段。

  2. Signature

    签名部分是对上面两部分数据签名,通过哈希算法,以确保数据不会被篡改。

  3. 参考资料

    jwt.io/introduction

相关推荐
CoovallyAIHub9 分钟前
BMW GenAI4Q:每57秒下线一辆车,AI如何为每辆车定制专属质检清单
数据库·算法·架构
Solar202524 分钟前
企业数据API对接选型指南:技术架构、评估标准与行业实践
大数据·运维·人工智能·架构·云计算
小超同学你好1 小时前
Transformer 15: DeepSeek-V2 架构解析:MLA + DeepSeekMoE 与主流架构对比
语言模型·架构·transformer·llama
AI精钢1 小时前
OpenLobster 的优势与劣势:一次面向 OpenClaw 用户的架构审视
java·微服务·架构·ai agent·mcp·openclaw·openlobster
_下雨天.1 小时前
LNMP架构学习笔记
笔记·学习·架构
tumeng07112 小时前
springboot项目架构
spring boot·后端·架构
没有bug.的程序员2 小时前
撕裂微服务网关的认证风暴:Spring Security 6.1 与 JWT 物理级免登架构大重构
java·spring·微服务·架构·security·jwt
学嵌入式的小杨同学2 小时前
STM32 进阶封神之路(十三):空气质量传感器实战 ——KQM6600 模块从协议到代码(串口通信 + 数据解析)
c++·stm32·单片机·嵌入式硬件·架构·硬件架构·嵌入式实时数据库
头顶秃成一缕光3 小时前
Redis + Caffeine 多级缓存架构
redis·缓存·架构
炸裂狸花猫3 小时前
Kubernetes架构演进:Node Pool分层与Pod IP不足的解决方案
云原生·架构·kubernetes·aws·oci·oke