📅  最后修改于: 2023-12-03 15:23:56.556000             🧑  作者: Mango
JWT (JSON Web Token) 是一种基于 JSON 格式的轻量级身份认证和授权规范。它允许我们用于在传输过程中安全地传递信息 (claims),并且经过签名处理。
在 Node.js 中,我们可以使用一些库来创建和验证 JWT。
在开始之前,请确认你已经安装了 Node.js 环境。接下来我们需要安装两个依赖库:jsonwebtoken 和 express。
npm install jsonwebtoken express --save
使用 jsonwebtoken 库创建 JWT,我们需要一个私钥和一些要包含的信息。
以下是一个简单的示例:
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
app.get('/', (req, res) => {
const privateKey = 'mysecretkey'; // 这里是你的私钥,应该从环境变量获取
const userData = { // 用户信息
name: '张三',
isAdmin: true
};
const token = jwt.sign(userData, privateKey, { expiresIn: '1 hour' }); // 创建 JWT
res.send(token); // 返回 JWT
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
在这个示例中,我们使用 privateKey 和 userData 创建一个 JWT,并将其返回给客户端。expiresIn 参数表示 JWT 的有效期,这里设置为 1 小时。
在服务端使用 JWT,我们需要验证它是否被篡改,并确认它是否过期。
以下是一个简单的示例:
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
app.get('/', (req, res) => {
const token = req.headers.authorization.split(' ')[1]; // 从请求头获取 JWT
try {
const privateKey = 'mysecretkey'; // 这里是你的私钥,应该从环境变量获取
const userData = jwt.verify(token, privateKey); // 验证 JWT,并返回用户信息
console.log('user:', userData);
res.send('ok');
} catch (error) {
console.log('error:', error);
res.status(401).send('Unauthorized'); // JWT 无效或过期
}
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
在这个示例中,我们从请求头获取 JWT,然后使用 verify() 方法对其进行验证。如果 JWT 无效或过期,我们将返回 401 状态码。
使用 Node.js 创建和验证 JWT 很简单。使用 jsonwebtoken 和 express 库,我们可以轻松地在应用程序中使用 JWT 进行身份验证和授权。
完整的代码示例可以在 GitHub 上找到。