如何利用 Express.js 实现 JWT 身份认证

随着互联网的发展,身份认证问题越来越受到关注。在 Web 应用程序中,JWT(JSON Web Token)是一种广泛使用的身份认证方案。它使用 JSON 对象来传输安全信息,可以在客户端和服务器之间轻松传输,而且不需要使用 Cookie 或 Session。

本文将介绍如何使用 Express.js 和 JWT 实现身份认证。

什么是 JWT

JWT 是一种将信息与数字签名结合在一起的身份认证方案。它由三部分组成:

  • Header: 包含了算法和类型的信息。
  • Payload: 包含了要传输的信息,比如用户 ID。
  • Signature: 用于验证信息的完整性和真实性。

JWT 可以在客户端和服务器之间进行传输,因为它是基于 JSON 的,所以可以使用任何支持 JSON 的编程语言进行解析和生成。

如何使用 Express.js 实现 JWT 身份认证

以下是使用 Express.js 实现 JWT 身份认证的步骤:

1. 安装依赖

首先,我们需要安装 jsonwebtokenexpress-jwt 依赖。它们是生成和验证 JWT 的工具。

npm install jsonwebtoken express-jwt

2. 生成 JWT

在用户登录成功后,我们需要生成 JWT 并将其发送给客户端。

const jwt = require('jsonwebtoken');
const secret = 'your-secret-key';

// 生成 JWT
const token = jwt.sign({ userId: 'user-id' }, secret, { expiresIn: '1h' });

// 将 JWT 发送给客户端
res.json({ token });

在上面的代码中,我们使用 jsonwebtoken 生成 JWT,并将其发送给客户端。

3. 验证 JWT

在客户端发送请求时,我们需要验证 JWT 是否有效。

const expressJwt = require('express-jwt');
const secret = 'your-secret-key';

// 验证 JWT
app.use(expressJwt({ secret }).unless({ path: ['/login'] }));

// 处理错误
app.use((err, req, res, next) => {
  if (err.name === 'UnauthorizedError') {
    res.status(401).send('Invalid token');
  }
});

在上面的代码中,我们使用 express-jwt 验证 JWT 是否有效。如果 JWT 无效,服务器将返回 401 错误。

4. 在路由中使用 JWT

在需要进行身份认证的路由中,我们可以使用 req.user 获取用户信息。

app.get('/protected', (req, res) => {
  // 获取用户信息
  const userId = req.user.userId;

  // 处理请求
  res.send(`Hello, ${userId}`);
});

在上面的代码中,我们使用 req.user 获取用户信息,并进行后续处理。

总结

本文介绍了如何使用 Express.js 和 JWT 实现身份认证。通过使用 JWT,我们可以在客户端和服务器之间轻松传输用户信息,而不需要使用 Cookie 或 Session。

在实际开发中,我们需要注意 JWT 的安全性,比如在生成 JWT 时使用强密码、设置短过期时间等。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6589386deb4cecbf2de778e2


纠错
反馈