使用 Passport-JWT 在 Express.js 中进行令牌身份验证

阅读时长 6 分钟读完

身份验证是任何 Web 应用程序的必要部分,而令牌身份验证是比传统身份验证方法更安全的一种方式。 在本文中,我们将介绍如何使用 Passport-JWT 在 Express.js 中执行令牌身份验证。

令牌身份验证

令牌身份验证基于用户凭证而不是 cookie 或 session。 在令牌身份验证中,用户在成功登录后,服务器将生成一个 JSON Web Token(JWT),并将其发送回客户端。客户端将 JWT 存储在其本地存储器中,并在每个后续请求中将其作为头部发送。服务器使用 JWT 来验证用户的身份,以确定用户是否具有所请求的资源的访问权限。

Passport-JWT

Passport 是一个 Node.js 的身份验证中间件,可帮助在 Express.js 应用程序中实现身份验证。 Passport-JWT 是一个 Passport 的插件,用于在 Express.js 中使用令牌身份验证。

Passport-JWT 使用 JWT 来验证用户的身份。 它依赖于 jsonwebtoken 和 passport-local 模块。

安装 Passport-JWT

使用以下命令可以安装 Passport-JWT:

配置 Passport-JWT

在应用程序中安装并配置 Passport 中间件后,首先需要调用 Passport.use() 函数并指定使用的策略。 然后,创建一个 jwtOptions 对象,该对象包含 JWT 的配置。

本文示例中的 Passport-JWT 配置如下:

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

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

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

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

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

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

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

在上述代码中,我们已创建两个策略:LocalStrategy 和 JWTStrategy。LocalStrategy 验证用户的登录信息,JWTStrategy 基于 JWT 验证用户的身份。 JWT 的选项 jwtOptions 指定从请求中提取令牌并提供秘钥。

在路由中使用 Passport-JWT

完成 Passport-JWT 的配置后,可以在 Express.js 路由中使用它。

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

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

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

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

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

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

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

上述代码展示了如何在路由中使用 Passport-JWT。 在登录时,我们将生成 JWT 并将其作为响应头返回到客户端。 在获取受保护资源时,我们需要在路由中使用 passport.authenticate('jwt', { session: false }) 来验证用户是否有权访问请求资源。

示例代码

完整的 Express.js 应用程序代码可以在以下存储库中找到:

https://github.com/hensher/passport-jwt-example

上述存储库中的代码提供了一个示例,可帮助实现在 Express.js 中使用 Passport-JWT 进行令牌身份验证。

总结

本文介绍了使用 Passport-JWT 在 Express.js 应用程序中实现令牌身份验证的步骤。 我们了解了身份验证的重要性,并学习了令牌身份验证及其优势。 最后,我们学习了如何使用 Passport-JWT 实现令牌身份验证,并提供了一个示例。

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

纠错
反馈