如何在 Node.js 中使用 JSON Web Token(JWT)进行身份验证

阅读时长 5 分钟读完

JSON Web Token(JWT)是一种用于在网络应用程序之间安全地传递信息的开放标准。JWT由三部分组成:头部,载荷和签名。头部通常包含JWT的类型和使用算法的信息。载荷通常包含有关用户或实体的信息,例如用户名或角色。签名用于验证消息是否未被篡改。

在Node.js中,您可以使用jsonwebtoken库来轻松地创建和验证JSON Web令牌。这篇文章将展示如何在Node.js中使用jsonwebtoken来实现JWT身份验证。

步骤1:安装jsonwebtoken

在Node.js中,您可以使用npm来安装jsonwebtoken。

步骤2:创建JWT

要创建JWT,请使用jsonwebtoken库中的sign方法。此方法采用两个参数:负责生成的有效载荷和密钥。

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

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

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

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

在此示例中,我们创建了一个有效载荷,其中包含用户标识的user_id字段和用户名的username字段。我们还创建了一个名为jwtSecretKey的密钥,该密钥用于签署JWT。最后,我们使用jsonwebtoken库的sign方法创建了一个JWT,并将其打印到控制台上。您可以将其保存在数据库或本地存储中以供以后使用。

步骤3:验证JWT

要验证JWT,请使用jsonwebtoken库中的verify方法。此方法采用三个参数:您要验证的JWT,用于验证的密钥以及可选的回调函数。

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

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

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

在此示例中,我们使用jsonwebtoken库的verify方法来验证JWT。我们还传递了与创建JWT时使用的相同jwtSecretKey作为验证密钥。如果JWT有效,则返回有效载荷的属性对象。否则,将返回一个错误对象。

步骤4:将JWT存储在客户端

为了便于在客户端中存储JWT,您可以将其存储在Cookie或本地存储中。

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

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

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

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

在此示例中,我们使用了Express.js中的cookie-parser中间件来解析传入请求中的Cookie。我们使用我们之前创建的JWT和所用的相同的密钥。最后,我们使用res.cookie()将JWT存储在客户端的Cookie中。我们在第三个参数中设置了httpOnly标志,以确保该Cookie无法通过客户端JavaScript代码访问。

步骤5:使用JWT进行身份验证

要使用JWT进行身份验证,请获取保存在Cookie或本地存储中的JWT,并将其传递给jsonwebtoken库的verify方法进行验证。

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

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

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

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

在此示例中,我们检索了我们在第4步中存储在Cookie中的JWT。我们然后使用jsonwebtoken库的verify方法来验证JWT。如果JWT有效,则返回有效载荷中的username属性以显示欢迎消息。否则,返回401状态码,并发送“未经授权”的响应消息。

结论

JSON Web Token(JWT)是一种灵活,安全且可扩展的身份验证解决方案。使用jsonwebtoken库,您可以轻松地在Node.js应用程序中创建和验证JWT。在本文中,我们演示了如何使用jsonwebtoken在Node.js中实现JWT身份验证。使用这些指南和示例代码,您可以开始在自己的应用程序中实现基于JWT的身份验证。

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

纠错
反馈