在 Express.js 中使用 JSON Web Token(JWT)进行身份验证已经成为了一个相当流行的做法。JWT 是一种基于 JSON 的开放标准,用于在网络应用程序之间安全传输信息。JWT 可以作为一种简洁致密的方式,在用户和服务器之间传递信息,同时保证了信息的可靠性和完整性。
本篇文章将介绍 JWT 的基本概念和使用方法,并且提供一个实用的示例来演示 JWT 在 Express.js 中的应用。
JWT 基本概念
JWT 由三部分组成:头部、载荷和签名。它们的结构如下所示:
-----------------
- 头部:包含了两个部分,分别是令牌的类型(这里是JWT)和使用的算法(比如HMAC SHA256或者RSA)。
- 载荷:包含了要传输的信息,明文格式,只要不放敏感数据就行。
- 签名:使用算法对头部和载荷进行加密,防止信息被篡改。
JWT 中最关键的部分是载荷,它可以存储用户的信息以便于服务器进行验证和识别。一旦签名被伪造,想要篡改载荷就十分容易了,因此应该将敏感数据存储在服务器端。
在 Express.js 中使用 JWT
在 Express.js 中使用 JWT 的首要目标就是要实现用户身份的验证。我们可以将 JWT 这种身份验证方式分为两个步骤:
- 登录:当用户提供了正确的用户名和密码之后,服务器会颁发一个 JWT 令牌作为登录凭证。
- 请求:用户在每一次需要进行身份验证的请求中,都需要在请求的头部中带上 JWT 令牌,在服务端进行验证。
下面是一个基于 Express.js + JWT 的示例代码:
----- ------- - ------------------- ----- --- - ------------------------ ----- ---------- - ----------------------- ----- --- - ---------- -------------------------- ---------------- -- -- ------------------- ------- -- ---- -------- ----- ----- - - - --- -- --------- -------- --------- ---------- -- - --- -- --------- -------- --------- ---------- -- -- ----- ----------------- - ------------------------ ------------------ ----- ---- -- - ----- - --------- -------- - - --------- ----- ---- - ------------ -- - ------ ---------- --- -------- -- ---------- --- -------- --- -- ------ - ----- ----------- - ---------- --------- -------------- --- ------- -- ------------------- ---------- ----------- --- - ---- - ------------------ -- -------- ------------ - --- --------------------- ------------------ ----- ---- -- - -------------- -- -------------------- --- -------- ---------------------- ---- ----- - ----- ---------- - -------------------------- ----- ----- - ---------- -- ------------------ ------ -- ------ -- ----- ------ -------------------- ----------------- ------------------ ----- ----- -- - -- ----- ------ -------------------- -------- - ----- ------- --- -
首先,我们定义了一个 users
数组,用于存放用户信息。然后我们在 app.post('/login')
中实现了用户登录的逻辑。当用户提供正确的用户名和密码后,我们调用 jwt.sign
方法生成一个 JWT 令牌,并将其作为响应返回。
app.get('/protected')
这个路由(API)是需要进行身份验证的。为了实现这个功能,我们定义了一个名为 authenticateToken
的中间件,它会验证 JWT 令牌并在通过验证后将用户信息存储在请求对象中。在这个例子中,我们只简单地将用户 ID 作为响应返回。
总结
本文介绍了 JWT 的基本概念以及在 Express.js 中的应用。根据本文提供的代码示例,你可以在自己的项目中轻松地实现基于 JWT 的用户身份验证功能。同时,本文还提醒了读者,不要将敏感数据存储在 JWT 的载荷中,而应该将其存储在服务器端。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/649a4c0b48841e989472b249