nodejs生成token

2023-11-10

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nodejs生成token 的相关文章

随机推荐

  • Tracy 小笔记 Vue - 事件

    v on 事件监听 v on 绑定事件监听 缩写 v on 函数参数 在事件监听的时候 如果函数没有参数 那么调用的时候可以不加括号 也可以加括号 如 click add add 如果函数有参数 我们调用的时候加写空括号 那么这个参数的值是
  • Java数组实现循环队列的两种方法

    版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net Victor Cindy1 article details 46604575 用java实现循环队列的方法 1 增加一个属性size用来记录目前的元
  • TS模块化中会遇到的问题

    前言 当TS 使用 ES6 模块化标准 而编译目标使用 CommonJs 时 导入模块时出现问题 tsconfig json compilerOptions target es2016 配置编译目标代码的版本标准 module Common
  • python系列——yaml

    基本语法 大小写敏感 使用缩进表示层级关系 缩进不允许使用tab 只允许空格 缩进的空格数不重要 只要相同层级的元素左对齐即可 表示注释 数据类型 YAML 支持以下几种数据类型 对象 键值对的集合 又称为映射 mapping 哈希 has
  • linux离线部署python环境

    在实际生产中 经常需要离线在服务器上部署python环境 第一步 安装python环境 选择安装miniconda3作为python环境 下载Miniconda3 latest Linux x86 64 sh 之后安装即可 习惯将路径保存为
  • 找出数组中重复数字

    描述 查找数组中的重复元素情况 时间复杂度为o n 空间复杂度为o 1 数组的大小为n 数组元素值大小为0到n 1 比如 n 4 2 3 1 2 3 思路一 采用记录的思路访问 如果array i 代表一个位置 如果array array
  • Linux内核提权漏洞(Dirty-pipe)复现

    前言 CVE 2022 0847 是存在于 Linux内核 5 8 及之后版本中的本地提权漏洞 攻击者通过利用此漏洞 可覆盖重写任意可读文件中的数据 从而可将普通权限的用户提升到特权 root CVE 2022 0847 的漏洞原理类似于
  • vue高德地图marker批量标记与InfoWindow提示框

    一 前言 由于数据量大 如果一个一个添加marker会造成页面卡顿 所以在此就使用了批量标记 特此研究出一下几种方法 在高德平台获取key 高德开放平台 高德地图API 二 批量添加marker标记 1 海量点标记 MassMarks 优点
  • 华为od欢快的周末

    public class FunnyWeeks static final int N 110 static int arr new int N N static Map
  • 《老漏洞复现与分析篇》 - 其一 - shift后门

    引言 因为本菜鸡的博客没什么文章素材 所以想开一个新文章类别 本来想整一个漏洞分析和复现的 无奈由于实力不允许 只能再前面加一个 老 字 整一点多年前的老漏洞拿来复现和分析 俗话说得好 要善于总结前人的经验和智慧 才能在自己的前进道路上走得
  • txpro服务器维护,EFIFieryproServer和EFIFieryXF第7版发布说明

    新型纯软件保护系统 第 7 版不需要 USB 加密狗 而是采用灵活的软件保护 允许终端用户免费从一个 Fiery 到另一个 Fiery 重新托管许可证 第 7 版的重要变化 Fiery XF 服务器 macOS 版已终止 现在的 Fiery
  • Selenium Grid 简易安装--(selenium-server-standalone-*.jar)

    Selenium Grid Selenium Grid允许同时并行地 在不同的环境上运行多个测试任务 这里主要演示一下怎么使用Selenium Grid 准备 1 需要两台机子 2 两台机子分别安装好JDK环境 3 两台机子需要从 http
  • 【C++】矩阵的乘法

    先复习一下矩阵的乘法 已知 求AB 因为矩阵A是2 3矩阵 矩阵B是3 3矩阵 A的列数等于B的行数 所以矩阵A与B可以相乘 乘积AB是一个2 3矩阵 矩阵相乘时需要注意两点 一点是矩阵1的列数要等与矩阵2的行数 一点是矩阵相乘后的矩阵 c
  • Node.js配置别名alias的两种方法

    Node js配置别名alias的两种方法 什么是别名 import xxx from xxx import xxx from xx xx xxx 可以省去 xxx 直接从配置的目录开始找文件 环境准备 Node js 此文章使用v12 1
  • JAVA注释、标识符和变量

    JAVA正确注释和标识符 java的注释 java的注释就是用特殊规定的符号来说明在代码中对代码功能的解释 总共分为三种 1 这个为单行注释 2 这种为多行注释 3 用于文档注释 在类 成员变量以及方法功能的说明上 给与说明 提示功能 ja
  • 适用于windows的ubuntu子系统出现WSL2:Temporary Failure in Name Resolution解决方法

    WSL2 Temporary Failure in Name Resolution In WSL2 run remove existing resolv conf symlink that is pointing to a wrong na
  • ald计算机应用,人工智能可以优化ALD半导体制造工艺

    为了制造计算机芯片 全世界的技术专家都依赖原子层沉积 ALD 法 它可以创造出细到一个原子厚的薄膜 企业通常使用ALD制造半导体设备 但它也应用于太阳能电池 锂电池和其他能源相关领域 今天 制造商越来越多地依靠ALD来制造新型薄膜 但弄清楚
  • 挂机宝和网站服务器,挂机宝SSD硬盘vs普通硬盘访问官网哪个快?

    原标题 挂机宝SSD硬盘vs普通硬盘访问官网哪个快 秒开云硬盘篇 SSD固态硬盘vs机械硬盘 硬盘读写速度越快结构类型 网络服务器中的固态盘 SSD 比SATA磁盘驱动器给予更高的电脑磁盘读 写强度 也称之为键入 导出 I O 性能指标 具
  • 联邦计算在百度观星盘的实践

    导读 本文简短综述联邦计算领域的核心技术点 随着联邦计算在产业界的应用及普及 保护数据隐私与解决数据孤岛 二者可以兼得 为数字广告营销等领域提供了一个全新思路 一 导语 众所周知 数据是AI技术的燃料 更多高质量的数据意味着可以训练出更好性
  • nodejs生成token

    首先安装jsonwebtoken 命令 npm i jsonwebtoken save 代码如下所示 const fs require fs 文件模块 const path require path 路径模块 const jwt requi