一、使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:
- 客户端使用用户名跟密码请求登录
- 服务端收到请求,去验证用户名与密码
- 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
- 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
- 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
- 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据
二、JWT
JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。
JWT是由header(头部)payload(数据)signature(签名)三部分组成,中间用点分隔开,并且都会使用 Base64 编码。
如:
eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJuaW5naGFvLm5ldCIsImV4cCI6IjE0Mzg5NTU0NDUiLCJuYW1lIjoid2FuZ2hhbyIsImFkbWluIjp0cnVlfQ.SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc
三、node实例来演示jwt创建token
(1)建议一个文件夹
(2)用vs code打开该文件夹,在控制台执行npm init
(3)安装依赖
npm install jsonwebtoken
(4) 引入依赖
const jwt = require('jsonwebtoken')
(5) 创建一个payload 对象,用来存储用户信息
let payload = {
id:"134567",
name:"zhangsan"
}
(6) 创建一个签名,即密钥
let seccret = "jwttoken"
(7) 生成token
let token = jwt.sign(payload,seccret,{
expiresIn:"1h" , //到期时间7d(7天) 12h 120=120ms 提供三种单位
issuer:"zzuly" //发行人
})
(8) 运行
node token.js
(9) 结果
(10) 解析token
jwt.verify(token,seccret,(error,decoded)=>{
if(error){
console.log(error)
return error
}
console.log("校验",decoded)
})
注意:校验失败和token过期都会在执行error。
(11) 效果
四、git地址
git clone https://gitee.com/laingyua/jwtToken.git