![68ddde03f5c04de0c9146bb49deae983.png](https://i-blog.csdnimg.cn/blog_migrate/1f23db61a863005f6c01ef7773ace344.jpeg)
何为jwt?
JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。
为何要使用jwt+redis的形式来鉴权
token长什么样?
eyJhbGciOiJIUzI1NiJ9.eyJhZG1pbk5hbWUiOiIxODc4MzAxNzU2OSIsInN1YiI6IjE4NzgzMDE3NTY5IiwiZXhwIjoxNTk3NTQ0NzU2LCJEYXRlIjoxNTk3NTQxMTU2Njc3fQ.uW2SpYZw7SRKxG966vORWF7lqOKLt0ZZVnGu-Gsi894
第一部分叫头部(header), 第二部分叫载荷(payload), 第三部分叫签证(signature)
因此,JWT通常如下所示。
xxxxx.yyyyy.zzzzz
官网介绍:
头部(header)
头部通常由两部分组成:令牌的类型(即JWT)和所使用的签名算法,例如HMAC SHA256或RSA。
例如:
{
"alg": "HS256",
"typ": "JWT"
}
然后,此JSON被Base64Url编码以形成JWT的第一部分。
载荷(payload)组成部分:
{
"sub": "1234567890",
"name": "NILIUSHIGUANG",
"admin": true
}
签证(signature)
要创建签名部分,您必须获取编码的标头,编码的有效负载,机密,标头中指定的算法,并对其进行签名。
例如,如果要使用HMAC SHA256算法,则将通过以下方式创建签名:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
将三者放在一起
输出是三个由点分隔的Base64-URL字符串,可以在HTML和HTTP环境中轻松传递这些字符串,与基于XML的标准(例如SAML)相比,它更紧凑。
相对session,jwt有什么优点?
jwt的验证机制比session的验证机制更加灵活方便。
耦合度更低。Token可以在任何地方生成,只要在你的API被调用的时候,你可以进行Token生成调用即可.
Token机制在服务端不需要存储session信息,因为Token 自身包含了所有登录用户的信息。
项目鉴权流程
![a278b28c9206a11a502879349e69b0e0.png](https://i-blog.csdnimg.cn/blog_migrate/ea504cb52dd617efc5c1ef25ca223661.jpeg)
1.用户访问vue页面
2.前端判断页面是否需要验证权限
如果页面需要验证权限,则判断前端是否存在token,token不存在则跳转到登陆页
3.访问接口
后端判断接口是否需要鉴权
否:则直接调用接口
是:则通过token鉴权过后才能调用接口
技术准备
前端:vue+elementui
后端:springcloud+springboot+mybatisplus+redis+zookeeper+jw