📅  最后修改于: 2023-12-03 15:08:36.718000             🧑  作者: Mango
JWT,全称 JSON Web Token,是一种用于身份验证和授权的开放标准。在 Express.js 应用程序中,可以使用 JWT 身份验证来保护受保护的端点,确保只有经过身份验证的用户才能访问。
下面是一些在 Express.js 应用程序中实现 JWT 身份验证的步骤:
在 Express.js 应用程序中实现 JWT 身份验证之前,需要安装以下两个 Node.js 包:
jsonwebtoken:用于生成和验证 JWT。
express-jwt:用于解析并验证从客户端发送的 JWT。
可以使用以下命令来安装这些依赖项:
npm install jsonwebtoken express-jwt
在您的应用程序的身份验证端点中,用户标识(如用户名和密码)将被认证。如果用户验证成功,则应生成 JWT 并将其发送回客户端。该 JWT 包含有关用户的信息,并且对于访问受保护的端点是必需的。
以下是如何使用 jsonwebtoken 生成 JWT 的示例代码:
const jwt = require('jsonwebtoken');
const JWT_SECRET_KEY = 'your_secret_key';
function generateJwt(user) {
const payload = {
userId: user._id,
username: user.username,
email: user.email
};
const token = jwt.sign(
payload,
JWT_SECRET_KEY,
{ expiresIn: '1h' }
);
return token;
}
在上面的代码中,我们将用户信息作为有效负载传递给 jwt.sign
函数。此函数使用 JWT_SECRET_KEY(在应用程序中定义的密钥)来签署 JWT。还可以指定 JWT 的过期时间。
现在,您需要确保只有经过身份验证的用户才能访问受保护的端点。为了实现这一点,您可以使用 express-jwt 中间件。该中间件将解析和验证从客户端发送的 JWT,并从 JWT 中提取用户信息。如果 JWT 未经身份验证或已过期,则中间件将发送错误响应。
以下是如何在 Express.js 中使用 express-jwt 的示例代码:
const express = require('express');
const jwt = require('express-jwt');
const app = express();
const JWT_SECRET_KEY = 'your_secret_key';
app.get('/protected', jwt({ secret: JWT_SECRET_KEY }), (req, res) => {
// 如果用户已经通过身份验证,这里将调用
res.send('Protected endpoint');
});
在上面的代码中,jwt({ secret: JWT_SECRET_KEY })
中间件将解析从客户端发送的 JWT,并将提取的信息附加到 req.user
对象中。如果 JWT 未经身份验证或已过期,则中间件将发送错误响应,并防止用户访问受保护的端点。
现在您已经知道如何在 Express.js 应用程序中实现 JWT 身份验证了。通过遵循上面的步骤,您可以保护您的应用程序中的受保护端点,并确保只有经过身份验证的用户才能访问它们。记住,保护应用程序并不是一件容易的事情,需要仔细考虑和实施。