前端开发中关于Token的那些事儿:深入浅出JWT签名验签

news/2025/2/11 19:10:02/文章来源:https://www.cnblogs.com/johnv/p/18710327

前端开发中关于Token的那些事儿:深入浅出JWT签名验签

作为前端也要懂JWT,首先了解两个概念JWK JWT

JWK

JWK(RSA JSON Web Key)是一种用于表示 RSA 公钥或私钥的 JSON 对象,JWK 是 JSON Web Token (JWT) 和 JSON Web Encryption (JWE) 等标准的一部分,常用于安全传输密钥信息。

用途

  • RSA JWK 主要用于:

  • 密钥交换:在客户端和服务器间安全传输密钥。

  • 数字签名:用于 JWT 签名和验证。

  • 加密:用于 JWE 加密和解密。

RFC 7519 定义了 JSON Web Token (JWT) 的标准,JWT 是一种紧凑的、URL 安全的方式,用于在网络应用之间传递声明。

在线生成JWK https://mkjwk.org/

JWT(JSON Web Token)

JWT也就是我们平常说的Token,用来和后端接口交换数据的令牌。

logo

JWT 结构

JWT 由三部分组成,用点号(.)分隔:

  • Header:包含令牌类型和签名算法。

  • Payload:包含声明(claims),即要传递的数据。

  • Signature:用于验证令牌的完整性和真实性。

JWT详细信息参考 https://jwt.io/

代码实践JWT签发、验证

新建一个JWT实践项目,安装依赖JWTjose

mkdir jwt-practice
cd jwt-practice
npm init
npm i jose

package.json中修改包的加载方式,修改或添加字段:"type": "module",

新建index.js文件,并复制下面代码内容


import { SignJWT, importJWK, jwtVerify } from 'jose'const alg = 'RS256'
const jwk = {kty: 'RSA',n: 'whYOFK2Ocbbpb_zVypi9SeKiNUqKQH0zTKN1-6fpCTu6ZalGI82s7XK3tan4dJt90ptUPKD2zvxqTzFNfx4HHHsrYCf2-FMLn1VTJfQazA2BvJqAwcpW1bqRUEty8tS_Yv4hRvWfQPcc2Gc3-_fQOOW57zVy-rNoJc744kb30NjQxdGp03J2S3GLQu7oKtSDDPooQHD38PEMNnITf0pj-KgDPjymkMGoJlO3aKppsjfbt_AH6GGdRghYRLOUwQU-h-ofWHR3lbYiKtXPn5dN24kiHy61e3VAQ9_YAZlwXC_99GGtw_NpghFAuM4P1JDn0DppJldy3PGFC0GfBCZASw',e: 'AQAB',d: 'VuVE_KEP6323WjpbBdAIv7HGahGrgGANvbxZsIhm34lsVOPK0XDegZkhAybMZHjRhp-gwVxX5ChC-J3cUpOBH5FNxElgW6HizD2Jcq6t6LoLYgPSrfEHm71iHg8JsgrqfUnGYFzMJmv88C6WdCtpgG_qJV1K00_Ly1G1QKoBffEs-v4fAMJrCbUdCz1qWto-PU-HLMEo-krfEpGgcmtZeRlDADh8cETMQlgQfQX2VWq_aAP4a1SXmo-j0cvRU4W5Fj0RVwNesIpetX2ZFz4p_JmB5sWFEj_fC7h5z2lq-6Bme2T3BHtXkIxoBW0_pYVnASC8P2puO5FnVxDmWuHDYQ',p: '07rgXd_tLUhVRF_g1OaqRZh5uZ8hiLWUSU0vu9coOaQcatSqjQlIwLW8UdKv_38GrmpIfgcEVQjzq6rFBowUm9zWBO9Eq6enpasYJBOeD8EMeDK-nsST57HjPVOCvoVC5ZX-cozPXna3iRNZ1TVYBY3smn0IaxysIK-zxESf4pM',q: '6qrE9TPhCS5iNR7QrKThunLu6t4H_8CkYRPLbvOIt2MgZyPLiZCsvdkTVSOX76QQEXt7Y0nTNua69q3K3Jhf-YOkPSJsWTxgrfOnjoDvRKzbW3OExIMm7D99fVBODuNWinjYgUwGSqGAsb_3TKhtI-Gr5ls3fn6B6oEjVL0dpmk',dp: 'mHqjrFdgelT2OyiFRS3dAAPf3cLxJoAGC4gP0UoQyPocEP-Y17sQ7t-ygIanguubBy65iDFLeGXa_g0cmSt2iAzRAHrDzI8P1-pQl2KdWSEg9ssspjBRh_F_AiJLLSPRWn_b3-jySkhawtfxwO8Kte1QsK1My765Y0zFvJnjPws',dq: 'KmjaV4YcsVAUp4z-IXVa5htHWmLuByaFjpXJOjABEUN0467wZdgjn9vPRp-8Ia8AyGgMkJES_uUL_PDDrMJM9gb4c6P4-NeUkVtreLGMjFjA-_IQmIMrUZ7XywHsWXx0c2oLlrJqoKo3W-hZhR0bPFTYgDUT_mRWjk7wV6wl46E',qi: 'iYltkV_4PmQDfZfGFpzn2UtYEKyhy-9t3Vy8Mw2VHLAADKGwJvVK5ficQAr2atIF1-agXY2bd6KV-w52zR8rmZfTr0gobzYIyqHczOm13t7uXJv2WygY7QEC2OGjdxa2Fr9RnvS99ozMa5nomZBqTqT7z5QV33czjPRCjvg6FcE',}const privateKey = await importJWK(jwk, alg)/*** 签发JWT*/
const jwt = await new SignJWT({ maizuo: 'xxst' })/*** 签名算法*/.setProtectedHeader({ alg }).setIssuedAt()/*** 发行人*/.setIssuer('myname:admin:issuer')/*** 观众/接收人*/.setAudience('myname:user:audience')/*** 设置过期时间*/.setExpirationTime('2h').sign(privateKey)/*** 验证JWT*/
const { payload, protectedHeader } = await jwtVerify(jwt, privateKey, {issuer: 'myname:admin:issuer',audience: 'myname:user:audience',
})
//打印签发、验证过程
console.log({ jwt, payload, protectedHeader })

nodejs中执行index.js

node -v
# v22.12.0 我的node版本
node index.js

打印执行结果的数据

{jwt: 'eyJhbGciOiJSUzI1NiJ9.eyJtYWl6dW8iOiJ4eHN0IiwiaWF0IjoxNzM5MjY5NzUwLCJpc3MiOiJteW5hbWU6YWRtaW46aXNzdWVyIiwiYXVkIjoibXluYW1lOnVzZXI6YXVkaWVuY2UiLCJleHAiOjE3MzkyNzY5NTB9.Vu91Rh8IiTSglhERK3MCT6VSIyTwoCB4lA-gdBjJI7_1IBpUjXsMNOD9SsRoKyWfph5xyVlLoEiLczIWid9VWp2_1PfLu3a2DXpVYMIvTwWg5-N0hQJZq4ytPYPUhoc7ROeuwGVGs-t6gIIciJCDtg4r7LWMGY9v0ekJxRRbv9EEpI0W5zrUEbemRAeq1o4QiZ1dpslko4WDZPEO0fUWqjm0k1NDBtuXKM8LelDUS_fpGsaqNNgSiL_XGGNvYMOWEFpmCHUMupQzbAnwuApd0TVVt4el9Rbek1m7rVHTAzaE0ynAbgJyBg6yPtkkw4snX-3sCYWmWGs15Kc4mRDRPQ',payload: {maizuo: 'xxst',iat: 1739269750,iss: 'myname:admin:issuer',aud: 'myname:user:audience',exp: 1739276950},protectedHeader: { alg: 'RS256' }
}

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

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

相关文章

Eddystone 与 iBeacon

Eddystone 与 iBeacon 蓝牙信标 (Beacons) 是一种单向通讯方式,所以一般的用途就是发送提醒。 Beacons 是指使用蓝牙4.0(BLE)技术发射信号的小设备。 目前存活的 Beacons 标准有两个,分别是 Google 的 Eddystone 和 Apple 的 iBeacon. Eddystone Eddystone 是谷歌基于 Beac…

OrangePi 5 编译 Android12 源码

OrangePi 5 编译 Android12 源码 材料准备 源码下载地址 Orange Pi - Orangepi官方教程编译环境 在以下环境的 Ubuntu 虚拟机编译通过,基于 VMware Workstation 17 Pro.系统版本:ubuntu-18.04.6-lts-desktop-amd64; CPU:i5-8400,为 VM 分配 4 核; 内存:8G RAM + 16G swap…

Maui 基础 - Preferences 存储和检索应用程序的首选项

Maui 基础 Preferences 是 .NET MAUI 提供的一个静态类,用于存储和检索应用程序的首选项(即设置或配置)。它提供了一种简单的键值对存储机制,可以跨平台使用。每个平台使用其本地的存储机制来实现这些功能,例如:iOS 使用 NSUserDefaults Android 使用 SharedPreferences …

另辟新径实现 Blazor/MAUI 本机交互(一)

本系列由浅入深逐个文件解析工作原理 目录:WebViewNativeApi.cs NativeApi.cs MainPage.xaml.cs 实战 串口 小票机 蓝牙WebViewNativeApi.cs WebViewNativeApi.cs 文件中的代码实现了一个 NativeBridge 类,用于在 .NET MAUI 应用程序中的 WebView 和本地代码之间进行通信。以下…

AI 如何重塑劳动力市场:基于 Claude 数据的深度分析

前言 本文翻译自 Anthropic 今天发布的 The Anthropic Economic Index ,经济指数报告,这份报告基于 Claude 的数据对目前的 AI 使用情况做了汇总。 引言 在未来的几年里,人工智能系统将对人们的工作方式产生重大影响。因此,我们推出了 Anthropic Economic Index,这是一个旨…

Nacos Python SDK 强势来袭,动态管理大模型 Prompt!

Nacos 从 0.8.0 版本开始就一直参与 Python 生态建设,努力作为 Python 生态中分布式微服务发现和配置管理的解决方案一直往前演进。目前随着 AI 领域的发展,Nacos 社区的 Python 开发者用户越来越多,因此这次我们迭代了 Python 的 GA 稳定版本,对不少历史问题做了修复以及易…

踩坑记录-二分搜索的不同情况

二分搜索的不同情况 二分搜索可以用来查找满足条件的值,但是满足条件的值可能只有1个,也可能有多个。比如查找1的索引,对于【1,1,2,2】来说,就有2个。一般要求的就是:满足条件最大值/满足条件最小值。 二分搜索详细介绍可以参考:https://programmercarl.com/0704.二分…

《ESP32-S3使用指南—IDF版 V1.6》第五章 搭建开发环境

第五章 搭建开发环境 1)实验平台:正点原子DNESP32S3开发板 2)章节摘自【正点原子】ESP32-S3使用指南—IDF版 V1.6 3)购买链接:https://detail.tmall.com/item.htm?&id=768499342659 4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/esp32/AT…

内测之家介绍

内测之家:助力应用开发与迭代的专业平台内测之家是一款功能强大且全面的应用内测与管理平台,专为 iOS 和 Android 开发者打造,旨在为他们提供便捷高效、安全可靠的一站式服务。无论是从资源安全到传输安全,还是从数据保护到应用管理、统计分析,内测之家都展现出卓越的能力…

如何用好 AI 编码工具,让通义灵码帮你做更多工作

通义灵码,是阿里云与通义实验室联合打造的智能编码辅助工具,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、异常报错排查等能力,提供代码智能生成、研发智能问答能力。通义灵码,是阿里云与通义实验室联合打造的智…

用EXPLAIN检查SQL是否有慢查询

先看下面两张图: 图一 图二 同样都是查询语句,图一的条件采用的是模糊匹配,产生了全表扫面(type:a…

【触想智能】工控一体机在机械臂上应用的四大优势

随着工业自动化的发展,机械臂已成为现代制造业中不可或缺的一部分。为了使机械臂能够高效、精确地执行各种任务,工控一体机的应用变得越来越广泛。触想工控一体机在机械臂上的应用工控一体机是一种集计算、控制和通信于一体的高性能工业计算机,它不仅具备强大的计算能力,还…