nodejs生成token

首先安装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

在这里是提供的私钥是:

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDEFsVzaDaAACpuzaxeLxLsSIwZZitsWDFsUB3W6e917NBQYoT0
IcBd5ftaXvlEK8uPFz/x9rFjxJJwHXtE06W+YNB5w/HIdrZTj/dNH/zDrXge+PXs
hQ1igJ9CSypDdbo4rxYXjiDopVsJLkKCxmW7lcY6mhZNIY1RxkDcHqW2kQIDAQAB
AoGAA0Ihm85SgYP/MIIoaBQ+K0D1WwKwnAdHIvad2FFg0kPSHlPUw72/1Y+ZwqGr
YK+dnU4UmO+xeOfuSwCiaL1flqfHdey1xipkI7yn3Z0oH4+yQ922JHqnchxBw/ut
ElYtaNkysPnL75g1dEOkL9aCJmNz9s3mpihOgVuMUThpyTUCQQD3nfA4rs+ZppF5
xCbX052y80NMbL9A4cwtaJ7WyqXuX1TDXjawFxMrVvXi54D4aE/5PcnKp2Eg8Rwu
4R6KrbgrAkEAyro/OB1jjNQEqXO7jRmzEVzDOznpJDehrb9lwqRBUdEg5fMTw7r9
pBVcJWbiJAgF6n76IKnpqXm7VpGhqsUSMwJBAOOoA9o5bojXydxn6UZ5Ov3yBifX
u6cNckk1bQQR4KjeYPIWRrVzIZ6xHvR03/CDBzQiCMsXRIei5cR8GTZrLW0CQCGA
MZ5GTQMirjqKY33nt02xNJn+8eYIQ3GA5YIKvriUhIk7aBK6Pdv1o6qSm+A0azXb
Ed5/9ZsKAMlHe53Kvz0CQA5A2iSUvyGkb5z/TEwTXUoiGTYPzEqOJxTiLZuDy15A
DXwpqpfZX6Rf1izaj8iX0fo5A8ziZ4JEz/1uu6Kq4Ag=
-----END RSA PRIVATE KEY-----

在这里提供的公钥是:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEFsVzaDaAACpuzaxeLxLsSIwZ
ZitsWDFsUB3W6e917NBQYoT0IcBd5ftaXvlEK8uPFz/x9rFjxJJwHXtE06W+YNB5
w/HIdrZTj/dNH/zDrXge+PXshQ1igJ9CSypDdbo4rxYXjiDopVsJLkKCxmW7lcY6
mhZNIY1RxkDcHqW2kQIDAQAB
-----END PUBLIC KEY-----

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kjs_pass

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值