http协议本身是一种无状态的协议,用户的每一次请求都需要重新验证.

传统的解决方式

传统的解决方式是用户向服务器发送用户名和密码,验证通过后服务器会在当前对话(session)里面保存相关数据,向用户返回session_id写入用户的 Cookie。用户随后的每一次请求,都会通过 Cookie,将session_id 传回服务器,服务器根据session_id获取相关信息

弊端

随着服务由单机到集群分布式,基于session认证的服务端的开销和扩展性问题就暴露出来了,当然我们也能够通过共享session和session持久化来解决这些问题.
另外一种解决方案就是Json Web Token(jwt),服务器不保存 session 数据了,所有数据都保存在客户端,每次请求都发回服务器.

jwt主要流程

1.用户发送请求
2.服务器进行验证用户信息
3.服务器通过验证发送给用户一个token
4.客户端存储token(可以储存在 Cookie 里面,也可以储存在 localStorage等),并在每次请求时带上这个token
5.服务器根据token进行权限验证

JWT 的数据结构

生成的token如下:
在这里插入图片描述
可以看出中间用点分为三个部分,依次为
1.Header(头部)
2.Payload(负载)
3.Signature(签名)

代码示例

生成token:

在这里插入图片描述

解析token:
在这里插入图片描述

优缺点

1.因为json的通用性,所以JWT是可以跨语言支持的.
2.数据都保存在客户端,利于服务的架构升级,不会有跨域等问题.同样因为数据保存在客户端,一旦泄露用户的数据也就会暴露,任何人都可以获得该令牌的所有权限

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐