node使用JSON Web Token (JWT)身份验证

文章目录

  • 前言
  • 一、安装依赖
  • 二、使用
    • 1、默认同步签名(`HMAC SHA256`<**>`HS256`)对称秘钥
    • 2、同步签名(`RSA SHA256`<**>`RS256`)非对称秘钥(推荐)
    • 3、其他
  • 三、设置时间
    • 回溯时间
    • 过期时间
    • `如有启发,可点赞收藏哟~`


前言

JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。

JWT是由header(头部)payload(数据)signature(签名)三部分组成,中间用点分隔开,并且都会使用 Base64 编码。

本文使用了密钥文件,可先生成相关秘钥数据(参考node加密集合(前端加密、后台解密))


一、安装依赖

npm install jsonwebtoken -S
and if use TS
npm install @types/jsonwebtoken -D

二、使用

1、默认同步签名(HMAC SHA256<**>HS256)对称秘钥

生成对称私钥

import { generateKeyPairSync } from 'crypto'const { privateKey } = generateKeyPairSync('rsa', {modulusLength: 1024, // publicKeyEncoding: {type: 'spki',format: 'pem'},privateKeyEncoding: {type: 'pkcs8',format: 'pem',cipher: 'aes-256-cbc',passphrase: 'top secret',}
});

token加解密

const privateKey = 'admin-node-ts' // 自定义密码或者使用上述生成的对称私钥// 加密
import jwt from 'jsonwebtoken';
var token = jwt.sign({ foo: 'bar' }, privateKey);
console.log('encoded', token)// 解密
var decoded = jwt.verify(token, privateKey);
console.log('decoded', decoded)

2、同步签名(RSA SHA256<**>RS256)非对称秘钥(推荐)

secretOrPrivateKey has a minimum key size of 2048 bits for RS256

import { generateKeyPairSync } from 'crypto'const { privateKey } = generateKeyPairSync('rsa', {modulusLength: 2048,publicKeyEncoding: {type: 'spki',format: 'pem'},privateKeyEncoding: {type: 'pkcs8',format: 'pem',}
});// 加密
import jwt from 'jsonwebtoken';
var token = jwt.sign({ foo: 'bar' }, privateKey, { algorithm: 'RS256' });
console.log('encoded', token)// 解密
var decoded = jwt.verify(token, privateKey, { algorithms: ['RS256'] });
console.log('decoded', decoded)

3、其他

时间有限~

算法类型
HS256HS256(使用SHA-256的HMAC)是一种对称密钥的散列算法
HS384-
HS512-
RS256RS256算法是一种非对称算法,使用私钥来签署JWT,使用公钥来验证该签名。 在签署你的JWT时,RS256是推荐的算法。 它更安全,而且如果钥匙被破坏,你可以快速地旋转钥匙。 (Auth0默认使用RS256来签署JWT)
RS384-
RS512-
ES256-
ES384-
ES512-
PS256-
PS384-
PS512-
none-

三、设置时间

回溯时间

设置数据中添加iat字段,用于设置回溯时间

import jwt from 'jsonwebtoken';
import { PRIVATE_KEY } from "./const/secret-key";
const iat= Math.floor(Date.now() / 1000) - 60; // 回溯前60s
var token = jwt.sign({ foo: 'bar', iat }, PRIVATE_KEY.toString(), { algorithm: 'RS256' });

过期时间

  • 设置数据中添加exp字段,用于设置失效时间
import jwt from 'jsonwebtoken';
import { PRIVATE_KEY } from "./const/secret-key";
const exp = Math.floor(Date.now() / 1000) + 60; // 60s 失效
var token = jwt.sign({ foo: 'bar', exp }, PRIVATE_KEY.toString(), { algorithm: 'RS256' });
  • expiresIn
import jwt from 'jsonwebtoken';
import { PRIVATE_KEY } from "./const/secret-key";
var token = jwt.sign({ foo: 'bar' }, PRIVATE_KEY.toString(), { algorithm: 'RS256', expiresIn: 60 * 60 }); // 推荐
or
var token = jwt.sign({ foo: 'bar' }, PRIVATE_KEY.toString(), { algorithm: 'RS256', expiresIn: '1h' }); // 优先推荐

一般有以下单位
s=秒
m=分
h=时
d=天
其他可使用ms进行转换使用


如有启发,可点赞收藏哟~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/223092.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cellranger处理单细胞数据的一些错误记录

cellranger处理单细胞数据的一些错误记录 1、由于fastq不完整报错报错信息原因解决方案 2、化学版本选择错误报错信息原因解决方案 1、由于fastq不完整报错 报错信息 [error] Pipestance failed. Error log at: YS2310077_T_C_5/SC_RNA_COUNTER_CS/SC_MULTI_CORE/MULTI_CHEMI…

机器学习算法---分类

当然&#xff0c;让我为您提供更详细的机器学习算法介绍&#xff0c;重点在于每种算法的原理、优缺点&#xff0c;并在注意事项中特别提到它们对非平衡数据和高维稀疏数据的适应性。 1. 决策树&#xff08;Decision Trees&#xff09; 原理&#xff1a; 决策树通过学习简单的…

【前端学习记录】下载功能实现小记

前言 在项目中&#xff0c;通常会遇到很多需要下载的需求&#xff0c;那么应该如何处理下载功能呢&#xff1f; 通过模拟a标签实现下载 直接上代码 <template><div><p click"downloadFile" style"cursor: pointer; color: blue;">Do…

亚马逊云科技 re:Invent 大会 - S3 对象存储华丽升级

亚马逊云科技 re:Invent 大会 - S3 对象存储华丽升级 本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道。 文章目录 亚马逊云科技 re:Inv…

【MySQL】:数据类型

数据类型 一.数值类型1.整数1.tinyint2.bit类型 2.浮点类型1.float2.decimal 二.字符串类型1.char类型2.varchar类型3.char和varchar的区别4.日期和时间类型5.enum和set 三.集合查询 一.数值类型 1.整数 1.tinyint 正常插入 越界插入 如果我们向mysql特定的类型中插入不合法的…

springboot-redis设置定时触发任务详解

最近研究了一下“redis定时触发”&#xff0c;网上查了查资料&#xff0c;这里记录一下。 从Redis 2.8.0开始&#xff0c;Redis加入了发布/订阅模式以及键空间消息提醒&#xff08;keyspace notification&#xff09;功能。键空间消息提醒提供了允许客户端通过订阅指定信道获取…

Unity Mono加密解决方案

Unity Mono 是 Unity 引擎默认的脚本运行时环境&#xff0c;在游戏开发中扮演着重要的角色。Mono 由跨平台的开源 .NET 框架实现&#xff0c;它允许开发者使用 C# 等编程语言编写游戏逻辑。凭借简单易用的开发环境和高效的脚本编译速度&#xff0c;得到了众多游戏的青睐。 在 …

【Maven教程】(十二):版本管理 ——版本号定义约定及相关概念,自动化版本发布与创建分支,GPG签名 ~

Maven 版本管理 1️⃣ 版本管理的概念2️⃣ Maven 的版本号定义约定3️⃣ 主干、标签与分支4️⃣ 自动化版本发布5️⃣ 自动化创建分支6️⃣ GPG签名6.1 GPG 及其基本使用6.2 Maven GPG Plugin &#x1f33e; 总结 一个健康的项目通常有一个长期、合理的版本演变过程。例如JUn…

win10 + vs2017 + cmake3.17编译OSG-3.4.1

1. 下载文件 主要用到4个文件 1&#xff09;OSG-3.4.1源码2&#xff09;OSG第三方依赖库3&#xff09;OSG示例数据4&#xff09;cmake-3.17 我已经准备好了&#xff0c;大家可以自行下载。下载路径&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1E3YESh0T9KPlJJe2…

利用Python+selenium技术,实现浏览器基本操作详解,代码有详细注释

首先&#xff0c;需要安装selenium库和对应的浏览器驱动程序。以Chrome浏览器为例&#xff0c;可以使用以下命令安装selenium和chromedriver&#xff1a; pip install selenium然后&#xff0c;需要下载对应版本的chromedriver&#xff0c;并将其添加到环境变量中。下载地址&a…

代码随想录二刷 |二叉树 |144.二叉树的前序遍历

代码随想录二刷 &#xff5c;二叉树 &#xff5c;144.二叉树的前序遍历 题目描述解题思路代码实现递归法迭代法 题目描述 144.二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输…

godot 报错Unable to initialize Vulkan video driver解决

版本 godot 4.2.1 现象 godot4.2.1 默认使用vulkan驱动&#xff0c;如果再不支持vulkan驱动的主机上&#xff0c;进入引擎编辑器将报错如下 解决 启动参数添加 –rendering-driver opengl3 即可进入引擎编辑器 此时运行项目仍然会报错无法初始化驱动 在项目设置中配置编…

面试__Java常见异常有哪些?

java.lang.IllegalAccessError&#xff1a;违法访问错误。当一个应用试图访问、修改某个类的域&#xff08;Field&#xff09;或 者调用其方法&#xff0c;但是又违反域或方法的可见性声明&#xff0c;则抛出该异常。 java.lang.InstantiationError&#xff1a;实例化错误。当…

vue实现公式编辑器组件

实现方式一 1、效果图 2、实现代码 组件弹框实现 样式自己调整 公式的数字与汉字元素、符号 建立元素表 动态获取 完整代码&#xff08;calculate.vue&#xff09; <template><div id"formulaPage"><divref"formulaView"class"f…

记录今日将C语言的Windows程序更改为python语言Windows程序,实现子窗口控制,类似微信程序框架最简单的原型

基本思路 为什么要选择python制作Windows应用程序&#xff0c;主要就是源代码直接展示&#xff0c;发现问题随时修改&#xff0c;同时可以不断增加新的功能方便。 由于C语言的Windows程序中结构类型在python中不能使用&#xff0c; 因此我们按照ctypes模块指导意见继承structu…

Verilog自学还是报班?

FPGA作为国内领先的芯片产品&#xff0c;和传统芯片相比并不局限于单纯的研究和设计芯片&#xff0c;而是针对多种领域的产品通过特定的芯片模型进行优化设计。FPGA本身也构成了典型的半定制电路&#xff0c;涵盖了数字管理模块、输入、输出等单元。 FPGA最大的特点是可以在同…

Unity_C#中使用protobuf

Unity_C#中使用protobuf 下载官方protobuf地址&#xff1a; https://github.com/protocolbuffers/protobuf/releaseshttps://links.jianshu.com/go?tohttps%3A%2F%2Fgithub.com%2Fprotocolbuffers%2Fprotobuf%2Freleases protobuf-c#源码生成dll&#xff0c;导入unity 1.…

双向无线功率传输系统MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介&#xff1a; 初级侧转换器通过双向 AC/DC 转换器从电网获取电力&#xff0c;并由直流线电压 Vin 供电&#xff0c;而拾波侧被视为连接到 EV&#xff0c;并由连接到任一存储的单独直流源 Vout 表示或…

N26:构建无缝体验的平台工程之路-Part 2

​ 在第一​​​​​​部分&#xff0c;我们介绍了 N26 团队为达成 “在 Day 1 实现轻松部署” 的目标而设定的战略规划和开发人员体验图&#xff0c;在这一部分&#xff0c;我们将带您了解该团队如何构建最简可行平台以及该平台如何运作。 01 计划构建最简可行平台 我们通…