在 Node.js 中实现 JWT 身份验证

阅读时长 3 分钟读完

随着前端应用的快速发展,大部分 Web 应用和移动应用都需要进行用户身份认证。JWT(JSON Web Token)就是现在最流行的一种身份认证方式之一。本文将介绍如何在 Node.js 中实现JWT身份验证。

JWT 的原理

JWT 是一种 JSON 格式的令牌,用于在客户端和服务端之间传递信息。它由三个部分组成:

  1. 头部(Header):包含算法类型和令牌类型。
  2. 负载(Payload):包含用户身份信息等数据。
  3. 签名(Signature):用于验证令牌的真实性,防止被篡改。

在使用时,服务端在客户端登录验证通过后,颁发一个 JWT 令牌给客户端。客户端将该令牌包含在请求 Header 或 Cookie 中发送到服务端,服务端通过解码和验证令牌来验证用户身份。

实现 JWT 身份验证

安装依赖

安装 jsonwebtoken 模块来生成和验证 JWT 令牌。

生成 JWT 令牌

在后台用户登录验证通过后,可以生成一个 JWT 令牌并返回给客户端,让客户端使用该令牌进行后续操作。例如,下面是使用 jsonwebtoken 模块生成 JWT 令牌的代码:

其中,第一个参数 { userId: '123' } 表示负载中的用户信息(可以自定义其它属性),第二个参数 secret 表示服务端使用的密钥,第三个参数 { expiresIn: '1h' } 表示令牌的有效期为 1 小时。

解码和验证 JWT 令牌

客户端发送带 JWT 令牌的请求到服务端后,需要在服务端对该令牌进行解码和验证,来确定客户端请求的用户身份是否正确。例如,下面是使用 jsonwebtoken 模块解码和验证 JWT 令牌的代码:

-- -------------------- ---- -------
----- --- - ------------------------
----- ------ - ------------------ -- ------

----- ----------- - ----- ---- ----- -- -
  ----- ----- - ---------------------------------- ------ -- --- ------ --- --- --
  ----------------- ------- ----- -------- -- -
    -- ----- -
      ------ ---------------------- -------- --------------- -------- ---
    -
    ---------- - --------------- -- --- -- --------------
    -------
  ---
--

其中,verifyToken 是一个 Express 中间件,用于在客户端请求处理前对 JWT 令牌进行解码和验证。在解码和验证后,如果令牌验证失败,则向客户端返回 401 错误,并阻止该请求继续处理。如果令牌验证成功,则将用户 ID 存储到请求对象中,供后续处理使用。

总结

本文介绍了如何在 Node.js 中实现 JWT 身份验证,包括生成和验证 JWT 令牌的代码。在实际开发中,考虑到 JWT 令牌有一定的安全风险,可以采用一些额外的安全手段来加强身份验证的安全性,例如防止 JWT 令牌的被窃取和重复使用等。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65b32a63add4f0e0ffc3b85f

纠错
反馈