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

阅读时长 5 分钟读完

随着互联网的普及,越来越多的网站和应用需要用户认证和授权的功能。而 JWT(JSON Web Token)是一种常用的认证协议,它可以在前后端之间传递信息,并且比传统的 Cookie 机制更加灵活和安全。本篇文章将介绍如何在 Express.js 中使用 JWT 实现用户认证。

JWT 是什么?

JWT 是一种基于 JSON 格式的认证协议,它由三段 base64 编码的字符串组成,格式如下:

其中,Header 包含算法和类型等信息,如下所示:

Payload 包含要传递的信息,如用户 ID、角色等,如下所示:

Signature 是根据 Header、Payload 和密钥计算的签名,用于验证信息的完整性和真实性。

Express.js 中使用 JWT 实现用户认证

下面我们将介绍如何在 Express.js 中使用 JWT 实现用户认证。我们将假设已经有一个用户认证的 API,可以根据用户名和密码返回一个 JWT,如下所示:

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

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

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

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

这个 API 可以从客户端接收用户名和密码,并返回一个 JWT。

使用中间件验证 JWT

接下来,我们需要在 Express.js 中添加一个中间件,用于验证每个请求是否带有有效的 JWT。

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

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

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

这个中间件从请求头中获取 JWT,并且验证签名和有效期等信息。如果 JWT 验证成功,会将解码后的 Payload(即用户信息)存储在 req.user 中,并且调用 next() 继续执行后续的中间件和路由处理器。

现在,我们可以在 Express.js 中使用这个中间件,如下所示:

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

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

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

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

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

这个 Express.js 应用程序有两个路由,一个是用于用户认证的 /login,另一个是需要用户认证的 /protected。使用 auth 中间件可以保证只有携带有效 JWT 的请求才能访问 /protected 路由,否则会返回 401 错误。

总结

本篇文章介绍了如何在 Express.js 中使用 JWT 实现用户认证,包括从用户认证 API 获取 JWT、使用中间件验证 JWT 等步骤。使用 JWT 可以提高认证和授权的安全性和灵活性,可以在前后端之间传递信息,并且避免了传统 Cookie 机制可能带来的跨站请求伪造(CSRF)攻击。

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

纠错
反馈