Express.js 中实现 JWT 授权认证的方法

在前端开发中,授权认证是必不可少的一部分,而基于 JSON Web Token(JWT)的授权认证方案已经成为当前最流行和安全的方案之一。Express.js 是一个非常流行的 Node.js web 框架,本文将介绍如何在 Express.js 中实现 JWT 授权认证的方法,并提供示例代码和指导意义。

什么是 JSON Web Token(JWT)?

JSON Web Token(JWT)是一种基于 Json 的安全令牌。使用 JWT,可以将一个用户的身份信息存储在一个经过签名的、面向用户的令牌中,使用这个令牌,可以验证用户的身份,并保护用户的数据。JWT 使用了多个安全性措施来防止伪造、篡改、窃取等攻击。常常用于分布式系统中的用户认证、授权。

在 Express.js 中实现 JWT 授权认证,需要执行以下步骤:

1. 安装 jsonwebtoken 模块

需要先安装 Node.js jsonwebtoken 模块来帮助生成和解码 JWT。

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

2. 引入 jsonwebtoken 模块

需要在 Express.js 代码中引入 jsonwebtoken 模块。

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

3. 创建用于验证授权的中间件

需要创建一个中间件函数,用于检查是否携带了有效的 JWT。可以将此功能封装在一个单独的模块中,以供在应用程序中的任何路由中使用。

-- -------

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

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

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

以上代码首先从请求头中获取名为 auth-token 的 JWT,然后使用 jsonwebtoken 模块中的 verify 方法来验证 JWT 是否有效。如果验证通过,将 req.user 设置为用户名,以便在后续的路由处理中使用。如果验证失败,将返回 400 响应以告知客户端 JWT 无效。

4. 创建用于登录和生成 JWT 的路由

需要创建一个用于登录和生成 JWT 的路由。该路由生成 JWT 并将其作为响应的一部分返回客户端。

-- --------

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

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

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

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

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

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

以上代码首先从请求体中获取用户名和密码。如果用户名或密码无效,则返回 400 响应。如果用户名和密码有效,则使用 jsonwebtoken 模块中的 sign 方法生成 JWT,并作为响应的一部分返回给客户端。

5. 使用 auth 中间件保护需要授权访问的路由

在应用程序中,当需要保护某些路由时,可以使用 auth 中间件函数来检查是否携带了有效的 JWT。

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

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

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

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

以上代码将 auth 中间件传递给路由,以检测 JWT 是否有效。如果有效,路由将返回欢迎消息和用户名。

总结

通过上述步骤,我们可以在 Express.js 应用程序中实现 JWT 授权认证。在实际开发中,可以将与 JWT 相关的代码封装成单独的模块,并在应用程序的其他部分中重复使用。JWT 授权认证方案是一种安全且快速的方案,可以帮助开发者更好地保护应用程序。

示例代码可以在 Github 上获取:https://github.com/JoannaShepherd/express-jwt-authentication

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