前言
带着问题学习是最有目的性的,我们先提出以下几个问题,看看通过这篇博客的讲解,能解决问题吗?
- 什么是JWT?
- 为什么要用JWT?它有什么优势?
- JWT的认证流程是怎样的?
- JWT的工作原理?
我们带着4个问题进入学习
1.什么是JWT?
JWT
全称Json Web Token
,JWT 是一种开发的行业标准 RFC 7519
,用于安全的表示双方之间的声明。目前,JWT
广泛应用在系统的用户认证方面,特别是现在前后端分离项目。
2.为什么要使用JWT?它有什么优势?
用户登录认证方式分为传统的token
登录方式和JWT
方式,传统的方式又分为session
登录和缓存登录
2.1 session登录
"""
接收到登录请求, 1.得到用户 2.产生token 3.记录到session表 4.返回token
接收需要认证信息的请求, 1.拿到token 2.数据库校验 3.确定登录用户 4.返回认证后信息 与数据库session表交互
"""
2.2 缓存登录
"""
接收到登录请求, 1.得到用户 2.产生token 3.记录到缓存 4.返回token
接收需要认证信息的请求, 1.拿到token 2.缓存校验 3.确定登录用户 4.返回认证后信息 用户登录信息缓存存储
"""
2.3 JWT方式
"""
接收到登录请求, 1.得到用户 2.根据用户产生有用户信息的token 3.返回token
接收需要认证信息的请求, 1.拿到token 2.检验token是否合法,校验出用户 3.返回认证后信息
"""
2.4 JWT优点
- 服务器不需要存储
token
,token
交给每一个客户端自己存储,服务器压力小 - 服务器存储的是 签发和校验
token
两段算法,签发认证的效率高 - 算法完成各集群服务器同步成本低,路由项目完成集群部署(适应高并发)
2.5 JWT特点
token
一定在服务器产生,且在服务器校验token
一定参与网络传输token
携带的信息存在能被反解
与不能被反解
的多部分组成
3.JWT组成以及加密原理
JWT
是由头部header
、载荷payload
、签名signature
,三段式组成,用.
进行拼接,例如官网的这段字符串
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
每一部分都是一个json
字典加密形参的字符串,头部和载荷采用的是base64url
加密(前台后台都可以解密),签名采用hash256
不可逆加密注意:base64url
加密是先做base64
加密,然后再将字符串中的 -
替代 +
及_
替代 /
。
3.1 Header
头部包含了两部分,token
类型和采用的加密算法
{
"alg": "HS256",
"typ": "JWT"
}
typ
: (Type)类型,指明类型是JWT
。alg
: (Algorithm)算法,必须是JWS
支持的算法,主要是HS256
和RS256
它会使用 base64url
编码组成 JWT
结构的第一部分
3.2 Payload
这部分就是我们存放信息的地方了,你可以把用户ID
等信息放在这里,JWT
规范里面对这部分有进行了比较详细的介绍,JWT
规定了7个官方字段,供选用
iss (issuer)
:签发人exp (expiration time)
:过期时间,时间戳sub (subject)
:主题aud (audience)
:受众nbf (Not Before)
:生效时间,时间戳iat (Issued At)
:签发时间,时间戳jti (JWT ID)
:编号
常用的有