1、JWT的理解
JWT 的组成部分: 分别是 Header(头部)、Payload(有效荷载)、Signature(签名) 三者之间使用英文的"."分隔,
Pyload 部分才是真正的用户信息,他是用户信息经过加密之后生成的字符串
Header 和 Signature 是 安全性相关的部分,只是为了保证 Token 的安全性
使用方式:
客户端收到服务器返回的 JWT 之后,通常会将它储存在 localStorage 或 sessionStorage 中。
此后,客户端每次与服务器通信,都要带上这个 JWT 的字符串,从而进行身份认证。推荐的做法是把 JWT 放在 HTTP 请求头的 Authorization 字段中,格式如下:
Authorization:Bearer <token>
2、安装
jsonwebtoken :生成JWT字符串
express-jwt :用于将JWT字符串解析还原成JSON对象
npm install jsonwebtoken express-jwt
3、使用
3.1导入
// 导入用于生成JWT字符串的包
const jwt = require("jsonwebtoken");
// 导入用户客户端发送过来的JWT字符串,解析还原成JSON对象的包
const {
expressjwt } = require("express-jwt");
3.2定义密钥
为了保证 JWT 字符串的安全性,防止 JWT 字符串在网络传输过程中被别人破解,我们需要专门定义一个用于加密和解密
的 secret 密钥:
① 当生成 JWT 字符串的时候,需要使用 secret 密钥对用户的信息进行加密,最终得到加密好的 JWT 字符串
② 当把 JWT 字符串解析还原成 JSON 对象的时候,需要使用 secret 密钥进行解密
//定义secret密钥,建议将密钥命名为secretKey
const secretKey = "jwt NO1"; // 自定义
3.3 解析jwt 注册中间件
// 将JWT字符串还原为json对象
// expressjwt({ secret: secretKey, algorithms: ["HS256"] }) 用来解析token的中间件
// .unless({ path: [/^\/api\//] }) 用来指定哪些接口不需要访问权限
// 注意:只要配置成功了 express-jwt 这个中间件,就可以把解析出来的用户信息,挂在到req.auth上
app.use(
expressjwt({
secret: secretKey, algorithms: ["HS256"] }).unless({
path: [/