node里面token的加密与解密
安装初始化
- 安装token的生成与加密解密包
npm i jsonwebtoken -S
- 生成私钥文件
openssl genrsa -out private.key 2048
当出现Openssl 未被识别为内部或外部命令则需要查看是否有安装和配置系统变量。
下载和配置方式可以参考openssl
- 生成公钥文件
openssl rsa -in private.key -pubout -out private.key.pub
用 HS256 算法生成与验证 JWT
const jwt = require('jsonwebtoken')
// Token 数据
const payload = {
name: 'wanghao',
admin: true
}
/**
* HS256
* 用 HS256 算法生成与验证 JWT
*/
// 密钥 自定义设置
const secret = 'ILOVENINGHAO'
// 签发 Token
const token = jwt.sign(payload, secret, {
expiresIn: '1day'
})
//设置token过期时间
// 输出签发的 Token
console.log('HS256 算法:', token)
// 验证 Token
jwt.verify(token, secret, (error, decoded) => {
if (error) {
console.log(error.message)
return
}
console.log(decoded)
})
用 RS256 算法生成与验证 JWT
const jwt = require('jsonwebtoken')
const fs = require('fs')
// Token 数据
const payload = {
name: 'wanghao',
admin: true
}
// 获取签发 JWT 时需要用的密钥
const privateKey = fs.readFileSync('./private.key', 'utf8')
// 签发 Token
const tokenRS256 = jwt.sign(payload, privateKey, {
algorithm: 'RS256'
})
// 输出签发的 Token
console.log('RS256 算法:', tokenRS256)
// 获取验证 JWT 时需要用的公钥
const publicKey = fs.readFileSync('./private.key.pub')
// 验证 Token
jwt.verify(tokenRS256, publicKey, (error, decoded) => {
if (error) {
console.log(error.message)
return
}
console.log(decoded)
})