JWT基础概念详解JWT介绍
之前我们文章讲过分布式session如何存储,其中就讲到过Token、JWT 。首先,我们来回顾一下使用Token进行身份认证 。JWT组成
JWT是token的另一种方式,又有很多不同点 。JWT全称是JSON Web Token,它的本质是一个字符串 , 它里面包含数据和签名,接下来我们看看JWT是如何进行身份认证的 。
- 客户端发送登录请求到服务器
- 服务器在用户登录成功之后会生成一个token,此时这个token可能会被存储到数据库、Redis等,实现可以共享,服务端会把生成的token返回给客户端
- 客户端也会存储这个token , 每次请求需要携带这个token即可 。
- 客户端发送登录请求到服务器
- 服务器在用户登录成功之后签发一个JWT Token,之后会把这个token直接返回给客户端,此时服务器端是不存储任何用户信息的 。
- 客户端存储JWT Token,每次请求时携带这个token
- 服务端在每次请求前,检查传过来的token,判断签名、过期时间,验证通过后可以解析出token里面包含的用户信息 。
JWT主要由3部分组成,分别是Header、payload、signature 。下面我们具体讲讲每部分的作用 。Header
Header主要存储token类型和签名算法相关信息,例如
{"alg": "HS256","typ": "JWT"}
然后会把这个json字符串使用Base64进行编码,作为JWT的Header部分 。Payload
Payload主要是存储信息的,里面可以存储业务数据或者用户信息, JWT有以下7个默认字段可以选用 。
下面我们举个例子
- iss: Issure JWT签发方
- iat: Issued at time JWT签发时间
- sub: Subject JWT主题
- aud: Audience JWT接收方
- exp: Expiration time JWT过期时间
- nbf: Not before time JWT生效时间
- jti: JWT ID
{"sub": "123456","username": "admin"}
上面的json字符串会使用Base64进行编码,作为JWT的Payload部分,Payload部分默认是不加密的,所以一定不要把隐私信息放在Payload当中 。Signature
Signature是对上面两部分的数据的签名,对上面的Header和Payload数据 , 通过指定的算法生成Hash,防止数据被篡改 。下面是签名的计算公式JWT和Token区别
【JWT基础概念详解】HMACSHA256(base64UrkEncode(header) + "." + base64UrlEncode(payload), secret)
在计算出签名后,将上述的Header、Payload和Signature连接成一个字符串,中间使用"."进行分隔 , 这个就是最终的JWT 。
原文链接:https://monkey.blog.xpyvip.top/archives/jwt-ji-chu-gai-nian-xiang-jie
- Token需要查询进行验证,JWT不需要,可以直接进行校验 。
- Token需要存储在服务器端 , JWT在服务器端不存储任何信息 。
- Token可以在服务器端进行管理用户,例如登出、禁用,JWT不可以 , JWT依赖客户端删除本地的JWT Token 。
推荐阅读
- 三星fold3折叠手机_三星折叠手机fold3概念图
- 二 网络工程知识VLAN的基础和配置:802.1q帧;Access、Trunk、Hybrid接口工作模式过程与配置;VLANIF的小实验
- 11 微服务架构学习与思考:开源 API 网关02-以 Java 为基础的 API 网关详细介绍
- MasaFramework -- 缓存入门与设计
- MasaFramework -- 缓存入门与规则配置
- Docker_基础知识
- 10 微服务架构学习与思考:微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍
- 二 『现学现忘』Git基础 — 37、标签tag
- 【番外篇】Rust环境搭建+基础开发入门+Rust与.NET6、C++的基础运算性能比较
- 一 『现学现忘』Git基础 — 36、标签tag