📜  如何在 Express.js 应用程序中实现 JWT 身份验证?(1)

📅  最后修改于: 2023-12-03 15:08:36.718000             🧑  作者: Mango

如何在 Express.js 应用程序中实现 JWT 身份验证?

JWT,全称 JSON Web Token,是一种用于身份验证和授权的开放标准。在 Express.js 应用程序中,可以使用 JWT 身份验证来保护受保护的端点,确保只有经过身份验证的用户才能访问。

下面是一些在 Express.js 应用程序中实现 JWT 身份验证的步骤:

第 1 步:安装依赖项

在 Express.js 应用程序中实现 JWT 身份验证之前,需要安装以下两个 Node.js 包:

  • jsonwebtoken:用于生成和验证 JWT。

  • express-jwt:用于解析并验证从客户端发送的 JWT。

可以使用以下命令来安装这些依赖项:

npm install jsonwebtoken express-jwt
第 2 步:生成 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 的过期时间。

第 3 步:保护受保护的端点

现在,您需要确保只有经过身份验证的用户才能访问受保护的端点。为了实现这一点,您可以使用 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 身份验证了。通过遵循上面的步骤,您可以保护您的应用程序中的受保护端点,并确保只有经过身份验证的用户才能访问它们。记住,保护应用程序并不是一件容易的事情,需要仔细考虑和实施。