Express.js 框架中如何处理 JSON Web Token

阅读时长 4 分钟读完

在现代 Web 应用程序的开发中,认证和授权是非常重要的。JSON Web Token(JWT)是一种基于 Web 的指定的授权机制,它使用 JSON 信息来安全地传输信息,并且可以在不同的应用程序之间进行验证和共享。

在使用 Express.js 框架开发 Web 应用程序时,处理 JWT 变得非常容易。本文将介绍如何在 Express.js 框架中使用 JWT,包括如何生成和验证 JWT 以及如何在路由中使用它们。

安装依赖

首先,需要安装需要的依赖项。使用 npm 或 yarn 安装以下依赖:

  • jsonwebtoken:JWT 的 JavaScript 实现。
  • express-jwt:提供了一个用于验证 JWT 的中间件。
  • bcrypt:用于加密用户的密码。

生成和签发 JWT

首先,需要定义一个加密密钥。在编写代码之前,应该至少为生产环境配置一个随机的加密密钥。在本文中,我们将使用示例密钥 secret,但这并不适用于生产。

接下来,定义生成 JWT 的函数:

-- -------------------- ---- -------
-------- ------------------- -
  ----- ------- - -
    ---- --------
    ---- ---------- - -----
    ---- ---------- - ---- - -- - -- - -- -- -------
  -
  ----- ----- - ----------------- -------
  ------ -----
-
  • sub:JWT 的主题,即用户 ID。
  • iat:JWT 的发行时间。
  • exp:JWT 的过期时间。

使用 jwt.sign() 函数和定义的密钥 secret,将 payload 加密生成一个 JWT。

验证 JWT

对于使用 JWT 进行身份验证的路由,需要验证请求头中的 JWT。使用 express-jwt 中间件来实现 JWT 的验证。

expressJwt 函数需要传递一个参数 secret。在本示例中,使用定义的密钥 secret 进行验证。

expressJwt 中间件将请求中的 JWT 解码并验证其签名和过期时间。如果 JWT 未过期,且签名有效,则 req.user 对象将包含 JWT 的原始 payload

使用 JWT

假设有一个简单的用户身份验证路由:

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

在使用 generateToken() 函数生成 JWT 后,将 JWT 发送回客户端,客户端将在后续的请求中使用 JWT 进行身份验证:

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

在请求头中添加 JWT,使用 Bearer 方案来传递 JWT:

结论

在 Express.js 中使用 JWT 进行身份验证非常方便。在定义过程中,需要注意加密密钥的安全性,以避免恶意攻击。同时,可以在路由中使用 express-jwt 中间件来验证传入的 JWT,确保使用合法的 JWT 进行用户身份验证。

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

纠错
反馈