私钥用于加密,公钥用于解密
私钥用于颁发token,公钥用于验证token,公钥不能颁发token
私钥和公钥是一对,不能单独使用,利用私钥生成公钥,利用公钥进行解密
使用openssl来生成一对私钥和公钥:openssl是git bash自带的
生成方法:
openssl
genrsa -out private.key 2048
rsa -in private.key -pubout -out public.key
非对称加密
const privateKey = fs.readFileSync("../src/keys/private.key")
const publicKey = fs.readFileSync("../src/keys/public.key")
// 取出用户信息
const { id, username } = ctx.user
const payload = { id, username }
// 颁发token
const token = jwt.sign(payload, privateKey, {
expiresIn: 60 ** 60 * 24, // 一天过期
// 指定非对称加密算法, secretOrPrivateKey has a minimum key size of 2048 bits for RS256
// 所以在生成密钥时要指定2048位
algorithm: "RS256",
})
// 将token返回给前端
ctx.body = {
code: 0,
message: "用户登录成功",
data: {
user_id: ctx.user.id,
username: ctx.user.username,
token,
},
}