Express 中如何使用 JWT (JSON Web Tokens) 进行身份验证?

· 约 4 分钟读完 · 第 54 / 120 章

推荐答案

在 Express 中使用 JWT 进行身份验证的步骤如下:

  1. 安装依赖: 首先,安装 jsonwebtoken 和 express 包:

  2. 生成 JWT: 在用户登录成功后,生成一个 JWT 并返回给客户端:

  3. 验证 JWT: 创建一个中间件来验证 JWT:

  4. 保护路由: 使用 authenticateToken 中间件来保护需要身份验证的路由:

本题详细解读

JWT 简介

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在各方之间安全地传输信息作为 JSON 对象。JWT 通常用于身份验证和信息交换。

JWT 结构

JWT 由三部分组成,用点(.)分隔:

  1. Header:包含令牌类型和使用的哈希算法。
  2. Payload:包含声明(claims),通常是用户信息和其他数据。
  3. Signature:用于验证令牌是否被篡改。

JWT 工作流程

  1. 用户登录:用户提供凭据(如用户名和密码),服务器验证凭据并生成 JWT。
  2. 返回 JWT:服务器将 JWT 返回给客户端,客户端通常将其存储在本地存储或 cookie 中。
  3. 请求验证:客户端在后续请求中携带 JWT,服务器验证 JWT 并允许或拒绝请求。

代码解析

  • 生成 JWT:使用 jwt.sign 方法生成 JWT,expiresIn 选项设置令牌的有效期。
  • 验证 JWT:使用 jwt.verify 方法验证 JWT 的有效性,如果验证成功,将用户信息附加到请求对象上。
  • 保护路由:通过中间件 authenticateToken 来保护需要身份验证的路由,确保只有携带有效 JWT 的请求才能访问。

安全性考虑

  • 密钥管理:确保密钥(your-secret-key)的安全性,避免泄露。
  • HTTPS:在生产环境中使用 HTTPS 来加密传输的 JWT,防止中间人攻击。
  • 令牌过期:设置合理的令牌过期时间,减少令牌被盗用的风险。