随着互联网及移动互联网的快速发展,越来越多的应用程序需要进行用户身份验证及管理。为了满足这些需求,使用 JSON Web Token(JWT)进行用户身份验证已经成为技术领域的常见做法。
在本篇文章中,我们将介绍如何在 Express.js 中使用 JWT 进行身份验证。
JWT 简介
JSON Web Token (JWT) 是一个用于在网络上安全传输信息的开放标准 (RFC 7519)。JWT 可以通过数字签名来验证数据的完整性,以及对数据进行加密,保证它的保密性。JWT 主要由三部分组成:Header、Payload 和 Signature。
Header
Header 部分包括 Token 的类型(即 JWT)以及所使用的算法(如 HMAC SHA256 或 RSA)。
{ "alg": "HS256", "typ": "JWT" }
Payload
Payload 是包含声明的数据部分,它可以包含任何你想要传输的数据。这包括用户身份信息、权限信息或任何其他数据。Payload 是 JWT 的主要内容并且是加密的部分。
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
Signature
Signature 部分是用于验证数据完整性的部分。Signature 通常使用 Header 和 Payload 中的信息,以及一个密钥来生成。
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret )
在 Express.js 中使用 JWT 进行身份验证
实现使用 JWT 进行身份验证需要遵循以下步骤:
- 在服务器端生成 JWT 并发送给客户端(通常是在用户登录时)。
- 客户端每次请求需要身份验证的资源时,都将 JWT 发送到服务器。
- 服务器验证 JWT 是否有效,并根据从 JWT 中解析出的信息决定是否授权访问资源。
在服务器端生成 JWT:
-- -------------------- ---- ------- ----- --- - ------------------------ ----- ------ - ------------ ------------------ ----- ---- -- - -- -------------- ----- ---- - - --- -- --------- ---------- ------ --------------------- -- -- -- --- --------- ---------- ---- -- ------- - ---------- ---- -- ----- ------ -- - ---------- ----- --- --- ---
在客户端每次请求需要身份验证的资源时,都将 JWT 发送到服务器:
axios.get('/protected', { headers: { Authorization: `Bearer ${token}` } })
服务器验证 JWT 是否有效:
-- -------------------- ---- ------- --------------------- ----- ---- -- - ----- ----- - --------------------------------- ------ -- -- --- ---- ----------------- ------- ----- -------- -- - -- ----- - ------ -------------------- - -- -- --- ------------ ---------- -------- ---------- ----------- ----- ------------ --- --- ---
在上述代码中,jwt.sign
函数生成 JWT 并将其发送给客户端。axios.get
函数每次请求需要身份验证的资源时都携带生成的 JWT。jwt.verify
函数验证 JWT 是否有效,并根据解析出的信息决定是否授权访问资源。
结论
在 Express.js 中使用 JWT 进行身份验证是一个简单而有效的方法,可以确保用户身份的安全性。JWT 可以帮助您构建更安全的应用程序,并确保特定的资源仅能由授权用户访问。
继续学习 JWT 可以提高您的安全意识,并提供更多解决方案来保护应用程序中的数据。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f7ce3dc5c563ced5abd681