Bootstrap

openssl生成加密,公钥实现非对称加密

私钥用于加密,公钥用于解密
私钥用于颁发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,
     },
   }
;