在 Express.js 应用程序中使用 Passport 和 JWT 实现基于令牌的身份验证

在 Express.js 应用程序中使用 Passport 和 JWT 实现基于令牌的身份验证

身份验证是现代 Web 应用程序中必不可少的一部分。在过去,基于会话的身份验证是最常用的方法,但是现在随着云和微服务的兴起,会话会面临一些挑战,例如跨域和扩展性问题。

因此,基于令牌的身份验证成为了越来越受欢迎的选择。JSON Web Token (JWT) 是一种广泛使用的标准,用于在客户端和服务器之间传递信息。本文将介绍如何使用 Passport 和 JWT 在 Express.js 应用程序中实现基于令牌的身份验证。

第一步:准备工作

在开始之前,请确保你已经安装好 Node.js 和 Express.js。如果你还没有安装,请先按照官方文档进行安装。

然后,我们需要安装以下依赖项:

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

这些依赖项包括:

  • express:Web 应用框架
  • passport:身份验证框架
  • passport-jwt:JWT 身份验证策略
  • jsonwebtoken:JWT 实现

第二步:设置 Passport 和 JWT

接下来,我们将设置 Passport 和 JWT。首先,我们需要在应用程序中引入它们:

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

然后,我们需要配置 Passport。为了使用 Passport,我们需要定义一个新的策略。在这种情况下,我们将使用 passport-jwt 提供的策略。

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

在这段代码中,我们定义了一个名为 JWTStrategy 的新策略。我们使用 passport-jwt 包中提供的 jwtFromRequestsecretOrKey 选项来告诉 Passport 在哪里寻找 JWT 并使用什么密钥进行解密。

最后,我们在策略中实现一个回调函数,该函数将接受 jwtPayloaddone 参数。该回调函数用于从 JWT 中提取用户信息并将其返回给路由。

最后,我们需要定义一个生成 JWT 的函数,使用 jsonwebtoken 提供的 sign 方法:

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

在这个函数中,我们将用户信息作为第一个参数传递给 sign 方法,并指定我们的密钥和令牌的过期时间。该方法将生成一个 JWT,我们可以将其发送给客户端。

第三步:配置应用程序路由

现在我们已经设置了 Passport 和 JWT,接下来,我们需要在应用程序中设置路由。

我们将使用 express.Router() 创建一个新的路由器,然后在该路由器上定义我们的路由:

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

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

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

在这段代码中:

  • 我们首先定义 /login 路由,该路由用于验证用户凭据,并生成 JWT。我们将验证过程留作 TODO,同时,我们假设用户是“test”并且 ID 为“1”。
  • 然后,我们定义 /profile 路由,该路由对 JWT 进行身份验证,并从 JWT 中提取用户信息。我们使用 passport.authenticate 方法和我们刚刚定义的 JWTStrategy 策略来进行身份验证。

第四步:启动应用程序

现在我们已经设置了 Passport 和 JWT,并定义了应用程序的路由。最后,我们需要在应用程序中添加以下代码来启动应用程序:

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

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

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

在这段代码中,我们首先创建一个新的 Express 应用程序,并使用 express.json()express.urlencoded() 中间件来处理 HTTP 请求。然后,我们将路由添加到应用程序中,并使用 app.listen() 方法启动应用程序。

结论

在本文中,我们学习了如何在 Express.js 应用程序中使用 Passport 和 JWT 实现基于令牌的身份验证。我们设置了 Passport 和 JWT,为应用程序配置了路由,并将其打包到一个完整的示例中。

希望本文能对你有所帮助,祝你成功地创建你自己的基于令牌的身份验证应用程序!

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6721a8752e7021665e08629d