介绍
Express.js 是一个流行的 Node.js Web 应用框架,它可以快速搭建一个完整的 Web 应用或 API 服务。随着 Web 应用的发展,身份验证成为了常见的需求之一。JSON Web Token (JWT) 是一种流行的身份验证机制,通过在客户端和服务器之间传递令牌来验证用户身份。本文将介绍如何在 Express.js 应用中使用 JWT 令牌进行身份验证。
JWT 简介
JWT 是一个开放标准,它定义了一种紧凑且自包含的方式来在客户端和服务器之间传递信息。它由三个部分组成:header、payload、signature。其中,header 和 payload 是 Base64 编码的 JSON 对象,signature 是通过使用 header 和 payload 中的信息与预共享的秘钥进行签名生成的。JWT 令牌可以在客户端和服务器之间传递,以便验证身份。
在 Express.js 应用中使用 JWT
以下是在 Express.js 应用中使用 JWT 的详细步骤:
步骤一:安装所需的依赖项
我们需要安装以下依赖项:
- express: 用于创建和管理应用程序
- jsonwebtoken: 用于创建和验证 JWT 令牌
npm install express jsonwebtoken
步骤二:创建 JWT 令牌
在我们的 Express.js 应用中,我们需要创建一个路由来处理用户的登录请求,并通过使用 jsonwebtoken 库来创建一个 JWT 令牌。在下面的示例中,我们将使用密码 "secret" 来签名 JWT 令牌。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ------------------------ ----- --- - ---------- ----------------- ----- ---- -- - -- ----- ------------ ---- ----------- ----- ------- - - --------- ---------- -- ----- ------- - - ---------- ---- -- ----- ----- - ----------------- --------- --------- ---------- ----- --- --- ---------------- -- -- - ---------------- --------- -- ---- -------- ---
在上面的示例中,我们通过调用 jwt.sign()
来创建一个 JWT 令牌。payload
对象中包含用于验证用户身份的有用信息(如用户名),而 options
对象定义了此 JWT 令牌的选项(如有效期限)。最后,我们将 JWT 令牌返回给客户端。
步骤三:验证 JWT 令牌
下面是在 Express.js 应用中验证 JWT 令牌的步骤:
- 在应用启动时定义一个中间件函数
authenticateToken
,并验证传递过来的 JWT 令牌的合法性。 - 配置需要进行身份验证的路由以及中间件函数。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ------------------------ ----- --- - ---------- -- -- ------- ---------- -------- -- ------------ --- ------ ----- ----------------- - ----- ---- ----- -- - ----- ---------- - ----------------------------- ----- ----- - ---------- -- ------------------ ------ -- ------ -- ----- ------ -------------------- ----------------- --------- ----- ----- -- - -- ----- ------ -------------------- -------- - ----- ------- --- - ------------ ----- ---- -- - ---------- -------- ------- ------- -- --- ----- --- --- --------------------- ------------------ ----- ---- -- - ---------- -------- ---------- ----- ----- -------- -- --- ---------------- -- -- - ---------------- --------- -- ---- -------- ---
在上面的示例中,我们定义了一个中间件函数 authenticateToken
,它检查传递过来的 JWT 令牌是否存在、是否规范,并验证其签名是否正确。如果 JWT 令牌通过了验证,中间件函数会将有效载荷的用户信息添加到 req.user
对象中,并调用 next()
函数。我们使用中间件函数 authenticateToken
来保护API路由,在我们的示例中是 /protected
。
结论
在本文中,我们介绍了如何在 Express.js 应用中使用 JWT 令牌进行身份验证。JWT 令牌可以用于验证用户身份并保护我们的 API。通过使用一些简单的中间件函数,我们可以确保我们的 Express.js 应用程序保护了所有需要进行身份验证的路由。期望本文对您进行了指导,可以让您更好地使用 Express.js 和 JWT 进行编程。
参考资料
- Introduction to JSON Web Tokens
- Using JWT with Node.js
- JSON Web Token Authentication With Node.js and AngularJS
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/673690f10bc820c582550c20