在 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
包中提供的 jwtFromRequest
和 secretOrKey
选项来告诉 Passport 在哪里寻找 JWT 并使用什么密钥进行解密。
最后,我们在策略中实现一个回调函数,该函数将接受 jwtPayload
和 done
参数。该回调函数用于从 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