如何使用 Express.js 和 JWT 实现权限控制和认证

阅读时长 4 分钟读完

在开发 Web 应用程序时,保证用户数据的安全非常重要。为了实现这一点,开发人员需要使用某种认证和授权机制。其中 JWT(JSON Web Token)就是一种非常流行的认证机制。Express.js 是一个流行的 Node.js 框架,它可以用于快速搭建 Web 服务器。在本文中,我们将学习如何使用 Express.js 和 JWT 实现权限控制和认证。

什么是 JWT?

JWT 是一种用于在网络应用中传递声明的一种基于 JSON 的开放标准(RFC 7519)。该声明可以被加密和签名,以提高安全性并防止伪造。JWT 通常用于身份验证和授权。

JWT 是由三部分组成的,分别是头部、载荷和签名:

头部

头部通常包含两个部分:令牌的类型和所使用的加密算法。例如:

载荷

载荷包含一些声明。声明是有关实体(通常是用户)和其他数据的声明。有三种类型的声明:注册声明、公共声明和私人声明。例如:

签名

签名是对头部和载荷进行签名的一种方式,以便验证发送方的身份和确保消息的完整性。签名通常使用密钥生成,以确保只有使用相应密钥的接收方才能验证签名。

如何在 Express.js 中使用 JWT

在 Express.js 中,我们可以使用 jsonwebtoken 库来实现 JWT。首先,我们需要使用 npm 安装它:

接下来,我们将创建一个 Express.js 应用程序,并使用 JWT 管理用户的身份验证和授权。

1. 引入依赖

在 app.js 文件中,我们首先需要引入需要的依赖项:

2. 创建路由

我们需要创建一些路由,以处理我们的用户身份验证和授权请求。例如:

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

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

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

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

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

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

3. 创建身份验证函数

我们需要创建一个函数来验证用户是否已经被身份验证。例如:

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

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

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

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

4. 启动应用程序

现在我们已经完成了所有实现,可以启动应用程序了:

总结

在本文中,我们学习了如何使用 Express.js 和 JWT 实现身份验证和授权。我们使用 jsonwebtoken 库创建和管理 JWT,并创建一些路由来处理我们的身份验证和授权请求。我们还创建了一个身份验证函数,以确保只有身份验证的用户才能访问受保护的路由。本文所使用的代码都能够运行,它可以在实际项目中提供参考和指导。

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

纠错
反馈