身份验证是任何 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:
npm install passport-jwt jsonwebtoken passport-local
配置 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