Express.js 中 JSON Web Token 的使用教程

阅读时长 5 分钟读完

在 Express.js 中使用 JSON Web Token(JWT)进行身份验证已经成为了一个相当流行的做法。JWT 是一种基于 JSON 的开放标准,用于在网络应用程序之间安全传输信息。JWT 可以作为一种简洁致密的方式,在用户和服务器之间传递信息,同时保证了信息的可靠性和完整性。

本篇文章将介绍 JWT 的基本概念和使用方法,并且提供一个实用的示例来演示 JWT 在 Express.js 中的应用。

JWT 基本概念

JWT 由三部分组成:头部、载荷和签名。它们的结构如下所示:

  • 头部:包含了两个部分,分别是令牌的类型(这里是JWT)和使用的算法(比如HMAC SHA256或者RSA)。
  • 载荷:包含了要传输的信息,明文格式,只要不放敏感数据就行。
  • 签名:使用算法对头部和载荷进行加密,防止信息被篡改。

JWT 中最关键的部分是载荷,它可以存储用户的信息以便于服务器进行验证和识别。一旦签名被伪造,想要篡改载荷就十分容易了,因此应该将敏感数据存储在服务器端。

在 Express.js 中使用 JWT

在 Express.js 中使用 JWT 的首要目标就是要实现用户身份的验证。我们可以将 JWT 这种身份验证方式分为两个步骤:

  1. 登录:当用户提供了正确的用户名和密码之后,服务器会颁发一个 JWT 令牌作为登录凭证。
  2. 请求:用户在每一次需要进行身份验证的请求中,都需要在请求的头部中带上 JWT 令牌,在服务端进行验证。

下面是一个基于 Express.js + JWT 的示例代码:

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

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

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

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

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

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

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

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

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

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

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

首先,我们定义了一个 users 数组,用于存放用户信息。然后我们在 app.post('/login') 中实现了用户登录的逻辑。当用户提供正确的用户名和密码后,我们调用 jwt.sign 方法生成一个 JWT 令牌,并将其作为响应返回。

app.get('/protected') 这个路由(API)是需要进行身份验证的。为了实现这个功能,我们定义了一个名为 authenticateToken 的中间件,它会验证 JWT 令牌并在通过验证后将用户信息存储在请求对象中。在这个例子中,我们只简单地将用户 ID 作为响应返回。

总结

本文介绍了 JWT 的基本概念以及在 Express.js 中的应用。根据本文提供的代码示例,你可以在自己的项目中轻松地实现基于 JWT 的用户身份验证功能。同时,本文还提醒了读者,不要将敏感数据存储在 JWT 的载荷中,而应该将其存储在服务器端。

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

纠错
反馈