在 Express.js 中使用 JSON Web Tokens 完成身份验证

阅读时长 5 分钟读完

JSON Web Tokens(JWT)是一种基于 JSON 的安全令牌,用于在不同系统之间传递信息。在前端开发中,JWT 被广泛使用来完成用户身份验证和授权。Express.js 是一个流行的 Node.js 框架,它提供了方便的中间件来处理 JWT。在本文中,我们将探讨如何在 Express.js 中使用 JWT 完成身份验证,包括 JWT 的基础知识、在 Express.js 中使用 JWT 的步骤,以及一些实用的示例代码。

JWT 基础知识

在开始使用 JWT 之前,我们需要先了解一些基础知识。JWT 由三部分组成:Header、Payload 和 Signature。它们用一个点号(.)连接在一起组成一个完整的 JWT。

Header

Header 部分通常由两部分组成:令牌类型(typ)和算法(alg)。令牌类型指定为 JWT,算法指定为用于签名 JWT 的 HMAC、RSA 等算法。

比如,以下是一个 JWT 的 Header 示例:

Payload

在 JWT 的 Payload 中包含了一些关键的数据,比如用户 ID、权限信息等。Payload 可以包含任意数量的键值对,并且可以任意扩展。

比如,以下是一个 JWT 的 Payload 示例:

在这个例子中,Payload 中包含了用户的 ID(sub)、用户的名字(name)以及 JWT 的签发时间(iat)。

Signature

Signature 是使用转换后的 Header 和 Payload 进行签名的字符串。使用 Signature 可以确保 JWT 没有被篡改,同时也可以防止未授权的伪造 Token。

比如,以下是一个 JWT 的 Signature 示例:

其中,secret 是用于生成签名的密钥,这个密钥只有服务器才知道。

在 Express.js 中使用 JWT 的步骤

1. 安装 JWT 库

在使用 JWT 之前,我们需要先安装一个 Node.js 的 JWT 库。比较流行的库有 jsonwebtoken 和 node-jwt-simple,我们可以通过 npm 来安装:

2. 创建 JWT

在 Express.js 中,我们可以通过使用 jsonwebtoken 库来创建 JWT。以下是一个示例代码:

在这个示例中,我们使用 jwt.sign 方法创建了一个 JWT。该方法接受三个参数:

  • payload:JWT 的 Payload 数据;
  • secretKey:用于签名的秘钥;
  • options:一些选项,比如过期时间等。

3. 验证 JWT

在 Express.js 中,我们可以使用中间件来验证 JWT。以下是一个示例代码:

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

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

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

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

在这个示例中,我们使用了 Express.js 的中间件来验证 JWT。在每个请求中,我们首先检查 Authorization 头是否包含了 Token。如果没有 Token,我们就返回一个 401 的未授权错误;否则,我们使用 jwt.verify 验证 Token。如果 Token 验证通过,我们将解码后的数据存储在 req.user 中,并通过 next() 继续处理请求;否则,我们返回一个 401 的非法 Token 错误。

实用示例代码

生成 JWT

验证 JWT

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

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

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

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

总结

本文介绍了 JWT 的基础知识,以及如何在 Express.js 中使用 JWT 完成身份验证。在实际开发中,我们可以使用 JWT 快速地搭建一个安全的身份验证系统。希望这篇文章对大家有帮助。

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

纠错
反馈