Node.js 中如何使用 JWT 实现用户认证

阅读时长 6 分钟读完

随着前端技术的快速发展,越来越多的应用需要进行用户认证。JWT(JSON Web Token)是一种广泛使用的用户认证解决方案,它不需要在服务器端存储会话信息,而是通过在客户端生成 token 实现用户认证。

本文将详细介绍 Node.js 中如何使用 JWT 实现用户认证,包含了以下内容:

  • JWT 原理介绍
  • 使用 Node.js 中的 jsonwebtoken 库生成和解析 JWT
  • 在 Express 中实现用户认证示例

JWT 原理介绍

JWT 是一种基于 JSON 的开放标准(RFC 7519),用于在网络中传递声明。它是一种 token 解决方案,它将用户身份信息和有效期等信息打包成一个 token,发送给客户端,客户端在后续的每次请求中都带上该 token,以证明自己的身份。

JWT token 由三部分构成:

  • Header:包含 token 类型(即 JWT)、加密算法等信息,通常是经过 Base64 编码的 JSON 字符串。
  • Payload:包含 token 的声明信息,比如用户 ID、姓名等信息,也可以包含额外的自定义信息。Payload 也是经过 Base64 编码的 JSON 字符串。
  • Signature:用于验证 token 是否被篡改,由 Header、Payload 和秘钥通过指定的加密算法生成,通常是字符串,不经过 Base64 编码。

JWT 的优点是无状态、可扩展和安全,但缺点是 token 在客户端本地存储,可能被攻击者盗取并误用,需要使用 HTTPS 等方式保障传输安全。

使用 Node.js 中的 jsonwebtoken 库生成和解析 JWT

Node.js 中提供了 jsonwebtoken 库,可以方便地生成和解析 JWT,以下是一个简单的示例代码:

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

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

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

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

其中 jwt.sign() 方法用于生成 JWT,接收三个参数:Payload 对象、秘钥和选项。Payload 对象可以包含任意的声明信息,秘钥用于生成 Signature,选项可以设置过期时间等。

jwt.verify() 方法用于解析 JWT token,接收三个参数:JWT token、秘钥和回调函数。回调函数接收两个参数:错误对象和解析后的 Payload 对象。

在 Express 中实现用户认证示例

以下是一个在 Express 中使用 JWT 实现用户认证的示例代码:

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

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

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

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

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

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

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

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

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

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

以上代码定义了三个接口:

  • /login:处理用户登录请求,通过用户名和密码验证成功后,返回 JWT token。
  • /profile:受保护的接口,需要在请求头中携带 JWT token,通过 verifyToken 中间件验证 token 合法性,才能返回用户信息。
  • verifyToken:中间件函数,用于验证 JWT token 合法性。如果 token 不合法或已过期,返回 401 状态码和错误信息;如果合法,将解析后的 userId 存储在请求对象上,供受保护的接口使用。

该示例代码演示了如何使用 JWT 实现用户认证,如果你正在构建一个需要用户认证功能的 Node.js 应用,可以参考此示例代码进行开发。

总结

本文详细介绍了 Node.js 中如何使用 JWT 实现用户认证,包含了 JWT 的原理、jsonwebtoken 库的使用和在 Express 中实现用户认证的示例代码。JWT 是一种安全、可扩展的用户认证解决方案,它不需要在服务器端存储会话信息,可以方便地应用于各种前端应用中。

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

纠错
反馈