如何利用 Express.js 实现基于 JSON Web Tokens 的身份认证

阅读时长 6 分钟读完

在现代应用程序中,身份认证是一个重要的话题。为了确保数据的安全性,必须对用户进行身份验证。一种有效的身份验证方式是使用基于 JSON Web Tokens 的身份认证机制。在本文中,我们将探讨如何使用 Express.js 实现基于 JSON Web Tokens 的身份认证。

什么是 JSON Web Tokens?

JSON Web Tokens(JWT)是一种可以通过互联网传递的安全的身份验证机制。JWT 由三部分组成:头部,数据负载和签名。头部包含有关令牌的元数据,如算法和令牌类型。数据有效负载包含有关已经授权的用户的信息。签名是用于验证令牌的密钥。

当用户通过身份验证并在服务器上进行了登录,服务器为用户发放 JWT。此时,服务器将 JWT 发送回客户端,以便以后当客户端请求受限制的操作时,服务器能够验证其身份。此后,客户端必须在每个请求中使用该 JWT,以向服务器证明其身份。

如何使用 Express.js 实现 JSON Web Tokens 身份认证

我们将使用 Express.js 来实现 JSON Web Tokens 身份认证。

Step 1: 安装所需的软件包

要使用 Express.js 实现 JSON Web Tokens 身份认证,我们需要使用以下软件包:

  • express:用于构建 Web 应用程序。
  • jsonwebtoken:用于生成和验证 JWT。

我们可以使用以下命令安装它们:

Step 2: 创建路由

在使用 Express.js 进行身份验证时,我们需要为登录和注销创建路由。

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

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

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

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

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

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

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

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

在上面的代码中,我们创建了两个路由:一个用于登录,一个用于注销。

在登录路由中,我们首先获取用户提交的用户名和密码。然后,我们可以使用这些凭据来验证用户。如果用户通过了身份验证,我们将生成一个 JWT,并将其作为 JSON 响应发送回客户端。

在注销路由中,我们只是向客户端发送一个消息,并没有执行任何其他操作。

Step 3: 添加身份验证中间件

现在,我们需要在路由上添加一个身份验证中间件,以确保只有经过身份验证的用户可以访问受保护的资源。

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

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

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

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

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

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

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

        -------
    ---
-

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

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

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

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

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

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

在上面的代码中,我们定义了一个名为 authorize 的中间件。该中间件检查请求头中是否存在 JWT。如果 JWT 不存在,则返回 403 错误;否则,它将验证 JWT 的签名,并从有效负载中获取用户信息。最后,它将用户信息添加到请求体中,并将请求流程传递给下一个路由。

Step 4: 使用 Postman 进行测试

现在,我们已经完成了 JSON Web Tokens 身份认证,并已准备好使用 Postman 进行测试。首先,我们需要使用 Postman 发送一个登录请求:

在上面的请求中,我们在请求体中提供用户名和密码。当服务器接收到该请求时,它将验证提供的凭据,并按照上述流程返回一个 JWT。

接下来,我们可以使用该 JWT 来访问受保护的资源。为此,我们需要将 JWT 添加到请求头中:

在请求头中添加 JWT 后,我们将能够成功访问受保护的资源:

当我们在没有 JWT 的情况下尝试访问受保护的资源时,服务器会拒绝我们的请求:

总结

在本文中,我们学习了如何使用 Express.js 实现基于 JSON Web Tokens 的身份认证。我们定义了登录和注销路由,并将身份验证中间件添加到了受保护的路由中。最后,我们使用 Postman 进行了测试,并证明了我们的身份验证机制是有效的。

我们希望这篇文章能够帮助您了解身份验证的基础知识,并且能够启发您在自己的项目中实现身份验证机制。

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

纠错
反馈