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

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


纠错
反馈