JSON Web Token (JWT) 指南

简介: JSON Web Token (JWT) 指南

JSON Web Token (JWT) 是一种开放标准 (RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间将信息传输为 JSON 对象。JWT 通常用于身份验证和授权目的,因为它可以使用 JSON 对象在各方之间安全地传输。在本文中,我们将探讨 JWT 的一些关键概念,包括声明、主题、颁发者、元数据、加密密钥和 URN。

声明:

声明是一组在 JWT 中编码的键值对。声明包含有关令牌主题的信息,例如他们的姓名、电子邮件或任何其他被认为必要的信息。JWT 中有三种类型的声明:注册声明、公共声明和私有声明。已注册声明是预定义的并具有特定含义,例如“iss”(发行者)声明或“sub”(主体)声明。公共声明是用于保存有关主题的附加信息的自定义声明。私有声明用于在已同意声明含义的各方之间共享信息。

主题:

主题(或“子”)声明标识作为令牌主题的委托人。这可以是用户、应用程序或作为令牌焦点的任何其他实体。主题声明是已注册的声明,用于标识令牌的接收者。

发行人:

发行人(或“iss”)声明标识发行 JWT 的实体。此声明用于指示令牌的来源并验证发行者是否可信。发行者声明是已注册的声明,用于确定令牌的可信度。

元数据:

元数据是提供有关令牌的附加上下文的信息。这可以包括有关受众的信息、到期时间以及保护令牌所需的任何其他信息。元数据被编码为 JWT 中的附加声明。

加密密钥:

可以使用密钥对 JWT 进行加密,以保护令牌中包含的信息。这是使用对称加密算法(例如 AES)完成的,加密的 JWT 称为 JWE(JSON Web 加密)。加密密钥用于对JWT进行加解密,必须保密,以保证信息的安全。

URN:

通用资源名称 (URN) 是一个字符串,用于以独立于资源位置的方式标识资源,例如 JWT 声明。JWT 中使用 URN 来识别特定声明并确保它们得到正确处理。

总之,JWT 是一种以 JSON 对象的形式在各方之间传输信息的紧凑且独立的方式。JWT 的关键概念,包括声明、主题、颁发者、元数据、加密密钥和 URN,对于理解 JWT 的工作原理以及如何将其用于身份验证和授权目的至关重要。通过理解这些概念,您可以使用 JWT 构建安全可靠的系统,在各方之间安全地传输信息。

以下是如何使用 Node.js 和 jsonwebtoken 创建 JWT 服务器的示例:

安装所需的包

首先,我们需要通过运行以下命令来安装 jsonwebtoken 包:

npm install jsonwebtoken
复制代码

导入 jsonwebtoken 包

接下来,我们将在 Node.js 文件中导入 jsonwebtoken 包:

const jwt = require('jsonwebtoken');
复制代码

定义密钥

密钥用于签署和验证 JWT。它应该保持私密和安全。出于本示例的目的,我们将在 Node.js 文件中将密钥定义为常量:

const secret = 'secretkey';
复制代码

创建一个函数来生成 JWT

我们将创建一个函数,它接收一个有效载荷(要在 JWT 中编码的信息)并返回一个签名的 JWT。jsonwebtoken 包为此提供了一个签名方法:

function generateJWT(payload) {
  return jwt.sign(payload, secret, { expiresIn: '1h' });
}
复制代码

在此示例中,JWT 将在 1 小时后过期。

创建端点以生成 JWT

接下来,我们将创建一个客户端可用于请求 JWT 的端点。我们将使用 express 库来创建端点:

const express = require('express');
const app = express();
app.post('/generateJWT', (req, res) => {
  const payload = req.body;
  const token = generateJWT(payload);
  res.json({ token });
});
复制代码

启动服务器

最后,我们将使用 express 库提供的 listen 方法启动服务器:

const port = 3000;
app.listen(port, () => {
  console.log(`JWT server running on port ${port}`);
});
复制代码

就是这样!JWT 服务器现在已启动并正在运行。客户端可以使用对 /generateJWT 端点的 POST 请求来接收签名的 JWT。

请务必注意,这只是如何构建 JWT 服务器的一个示例。在真实场景中,您需要实施额外的安全措施,例如速率限制和输入验证。jsonwebtoken 包还提供了验证 JWT 的方法,可用于验证服务器上传入的 JWT。


相关文章
|
1月前
|
JSON 前端开发 JavaScript
前端使用lottie-web,使用AE导出的JSON动画贴心教程
前端使用lottie-web,使用AE导出的JSON动画贴心教程
|
28天前
|
JSON 算法 数据安全/隐私保护
聊聊 JSON Web Token (JWT) 和 jwcrypto 的使用
本文介绍了 JSON Web Token (JWT) 和 Python 中的 `jwcrypto` 库。JWT 是一种用于安全传输信息的紧凑型令牌,常用于身份验证。它由 Header、Payload 和 Signature 三部分组成,具有紧凑性、自包含和安全性等特点。`jwcrypto` 库提供了 JWT 的生成、验证、加密、解密及签名功能。通过该库,可以使用 RSA 等算法创建和验证 JWT,同时管理密钥对。安装 `jwcrypto` 可用 `pip install jwcrypto`,并示例展示了如何生成签名 JWT 和密钥对。
聊聊 JSON Web Token (JWT) 和 jwcrypto 的使用
|
1月前
|
XML JSON 前端开发
【Web 前端】XML和JSON的区别?
【4月更文挑战第22天】【Web 前端】XML和JSON的区别?
【Web 前端】XML和JSON的区别?
|
1月前
|
JSON 安全 API
【专栏】四种REST API身份验证方法:基本认证、OAuth、JSON Web Token(JWT)和API密钥
【4月更文挑战第28天】本文探讨了四种REST API身份验证方法:基本认证、OAuth、JSON Web Token(JWT)和API密钥。基本认证简单但不安全;OAuth适用于授权第三方应用;JWT提供安全的身份验证信息传递;API密钥适合内部使用。选择方法时需平衡安全性、用户体验和开发复杂性。
|
4天前
|
存储 JSON JavaScript
使用Python处理JSON格式数据
使用Python处理JSON格式数据
|
5天前
|
JSON JavaScript 测试技术
掌握JMeter:深入解析如何提取和利用JSON数据
Apache JMeter教程展示了如何提取和使用JSON数据。创建测试计划,包括HTTP请求和JSON Extractor,设置变量前缀和JSON路径表达式来提取数据。通过Debug Sampler和View Results Tree监听器验证提取结果,然后在后续请求和断言中使用这些数据。此方法适用于复杂测试场景,提升性能和自动化测试效率。
16 0
|
8天前
|
存储 JSON 分布式计算
DataWorks产品使用合集之如何在数据服务中处理JSON数据
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
31 11
|
12天前
|
JSON JavaScript IDE
JSON 数据格式化方法
JSON 数据格式化方法
26 3
|
14天前
|
XML 存储 JSON
51. 【Android教程】JSON 数据解析
51. 【Android教程】JSON 数据解析
22 2
|
1天前
|
JSON 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在使用CDAS语法同步MySQL数据到Hologres时,如果开启了字段类型宽容模式,MySQL中的JSON类型会被转换为什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

热门文章

最新文章