JsonWebToken 用于 JavaScript (Node.js):完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

JsonWebToken 用于 JavaScript (Node.js):完整指南及示例

\n\n

这是什么以及为什么需要它

\n\n

JsonWebToken 库(通常用作 jsonwebtoken 或 jwt)是在 Node.js 环境中处理 JSON Web Tokens (JWT) 最流行的库之一。JWT 是一种紧凑且自包含的方式,用于在各方之间以 JSON 对象的形式传输信息。该信息可以被验证并值得信赖,因为它经过了数字签名。JWT 可以使用密钥(HMAC 算法)或公钥/私钥对(RSA 或 ECDSA 算法)进行签名。

\n\n

该库的主要目的是在 Web 应用程序和 API 中实现授权和身份验证机制。当用户成功登录系统时,服务器会创建一个 JWT 并将其发送给客户端。然后,客户端在每次后续请求中发送此令牌,从而使服务器能够验证用户身份,而无需在服务器上存储会话数据。这使得 JWT 成为创建 RESTful API、微服务架构和单页应用程序 (SPA) 的理想解决方案。

\n\n

jsonwebtoken 库提供了一套完整的工具,用于创建 (sign)、验证 (verify) 和解码 (decode) 令牌。它支持所有标准签名算法,包括 HS256、RS256、ES256,并允许灵活配置令牌的生命周期、添加自定义字段 (claims) 以及使用公钥/私钥。由于其可靠性和简单性,该库被全球数千个项目使用,并且是 Node.js 生态系统中处理 JWT 的事实标准。

\n\n

安装

\n\n

要将 JsonWebToken 库安装到您的 Node.js 项目中,请在终端中执行以下命令:

\n\n
npm install jsonwebtoken
\n\n

如果您使用 Yarn:

\n\n
yarn add jsonwebtoken
\n\n

安装后,您可以将库导入到您的代码中:

\n\n
const jwt = require('jsonwebtoken');\n// 或者对于 ES 模块:\n// import jwt from 'jsonwebtoken';
\n\n

快速入门 — 最小工作示例

\n\n

让我们创建一个最简单的示例,演示 JWT 令牌的创建和验证:

\n\n
const jwt = require('jsonwebtoken');\n\n// 密钥(在实际项目中,请将其存储在 .env 文件中)\nconst secretKey = 'my-super-secret-key-123';\n\n// 我们要在令牌中编码的数据 (payload)\nconst payload = {\n  userId: 12345,\n  username: 'john_doe',\n  role: 'user'\n};\n\n// 1. 创建令牌\nconst token = jwt.sign(payload, secretKey, { expiresIn: '1h' });\nconsole.log('创建的令牌:', token);\n\n// 2. 验证令牌\ntry {\n  const decoded = jwt.verify(token, secretKey);\n  console.log('解码后的数据:', decoded);\n  // 输出:{ userId: 12345, username: 'john_doe', role: 'user', iat: ..., exp: ... }\n} catch (err) {\n  console.error('令牌验证错误:', err.message);\n}\n\n// 3. 不解码签名进行解码(不推荐用于授权!)\nconst decodedWithoutVerify = jwt.decode(token);\nconsole.log('未验证的解码:', decodedWithoutVerify);
\n\n

此示例演示了三个主要操作:使用 sign() 创建令牌,使用 verify() 验证其真实性,以及使用 decode() 进行简单的无签名验证解码。

\n\n

主要方法/函数/类

\n\n

1. jwt.sign(payload, secretOrPrivateKey, [options, callback])

\n

签名: jwt.sign(payload: Object|Buffer, secretOrPrivateKey: string|Buffer, options?: Object, callback?: Function) => string|void

\n

功能: 创建(签名)JW

推荐