nodejs生成token

842 阅读1分钟

首先安装jsonwebtoken,命令:npm i jsonwebtoken --save

代码如下所示:

const fs = require('fs')  // 文件模块
const path = require('path')  // 路径模块
const jwt = require('jsonwebtoken') // 引入jsonwebtoken模块
class Jwt {
// 获取调用方法的传值
  constructor(data) {
    this.data = data 
  }
  // 生成token
  generateToken () {
    let data = this.data
    // 获取时间转成时间戳
    let created = new Date().getTime()
    // 私钥,引入生成的私钥
    let cert = fs.readFileSync(path.join(__dirname, '/rsa_private_key.pem')) 
    let token = jwt.sign({
     token :data,
      validityTime: created + 3000000,// 自定义token 的有效时间
    }, cert, { algorithm: 'RS256' })
    return token
  }
  // 校验token
  verifyToken () {
    const token = this.data;
    // 公钥
    const cert = fs.readFileSync(path.join(__dirname, '/rsa_public_key.pem'))
    try {
      // 解密生成的token
      const result = jwt.verify(token, cert, { algorithms: ['RS256'] }) || {}
      // 获取生成token的时间
      const { validityTime, token } = result
      // 获取当前时间
      const current = new Date().getTime()
      // 判断是否失效
      if (current <= validityTime) {
        return {
          status: 200,
          token
        }
      } else {
        return {
          status: 403,
          msg: 'token失效'
        }
      }
    } catch (err) {
      return {
        status: 400,
        msg: '请填写正确的token'
      }
    }
  }
}

私钥和公钥的生成

为了增加密钥的复杂性,我使用了RSA256加密jwt,借助openssl来创建RSA256密钥对:方法如下:

先下载安装openssl,链接参考

打开openssl.exe

  • 生成私钥的命令:genrsa -out private.pem 2048
  • 公钥生成的命令:rsa -in private.pem -inform pem -out public.key -outform der -pubout