使用 JWT 安全地实现 RESTful API 的身份验证
身份验证在 RESTful API 中是至关重要的,无论您是为企业应用程序构建 API 还是为公共服务构建它们。正确的身份验证使得系统可以确认调用者的身份,并且可以限制对 API 的访问。
JWT(JSON Web Tokens)是用于身份验证的一种常见工具,可以安全地实现使用 RESTful API 的身份验证。在本文中,我们将使用一个示例程序来演示如何使用 JWT 来安全实现 RESTful API 的身份验证。我们还将介绍 JWT 的构成和工作原理。
JWT 简介
JSON Web Tokens 是一种用于身份验证的开放标准,它定义了一种紧凑且自包含的方式来传输信息,该信息可以在多个网络环境中安全传输。JWT 通常被用于对 API 进行身份验证。JWT 的基本原理是将用户凭证(例如用户名和密码)转换为密钥,并将其存储在内存或数据库中。
JWT 是由三部分构成的:头部,载荷和签名。下面将更详细地介绍这三个方面:
1.头部(Header)
JWT 头部包含两个部分:令牌类型和哈希算法。"type" 声明了令牌类型,JWT 通常使用 "JWT"。"alg" 是哈希算法,可以是 HS256 或 RS256。HS256 代表 HMAC-SHA256,而 RS256 代表 RSA-SHA256。
例如,下面是一个 JWT 的头部:
{ "typ": "JWT", "alg": "HS256" }
2.载荷(Payload)
Payload(载荷)包含实际的用户信息。它是一个 JSON 对象,由一些声明和数据组成。声明包含了令牌的元数据,就像令牌类型和签发时间等。下面是一个用 JSON 格式表示的 Payload:
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
Payload 是一个 Base64Url 编码的字符串,通常会将它放在一个数组里面。
3.签名(Signature)
Signature 是根据 Base64Url 编码后的 Header 和 Payload,加上密钥,用指定的哈希算法计算出来的字符串。
找到接收到的令牌上的密钥,并使用该密钥验证签名是否与接收到的令牌匹配。
JWT 的工作原理
JWT 的工作原理如下:
1.用户提供用户名和密码来请求访问权。
2.服务器验证用户名和密码是否正确。
3.如果用户信息正确,服务器会生成一个 JWT。
4.这个 JWT 会被发送给客户端。
5.客户端存储该 JWT 并发送到每个请求的 API。
6.服务器使用该 JWT 验证 API 请求的用户是否具有访问权。
示例代码
下面是一个使用 Node.js 和 Express 框架的示例代码,演示如何使用 JWT 来安全实现 RESTful API 的身份验证:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ---------- ----- --- - ------------------------ -- ---- ----- --------- - -------------- -- ---- ------------------ ------------- ---- - ----- -------- - ------------------ ----- -------- - ------------------ -- ------------ -- --------- --- ------- -- -------- --- ----------- - ---------------------- ------ ---------- -------- -- --------- --- ------- - -- -- --- ----- ----- - ---------- --------- -------- -- ---------- - ---------- ---- --- ---------- ------ ----- --- --- -- ------ --------------------- ------------- ---- - ----- ----- - --------------------------------- ------ -- -------- ----------------- ---------- ------------- -------- - -- ----- - ---------------------- ------ -------- ------ --- ------- - -- ----------- ---------- -------- ---------- --------- --- --- --- ---------------- ---------- - ------------------- ------- -- ---- ------- ---
在这个示例中,我们使用 Express 框架和 jsonwebtoken 模块来实现 JWT 身份验证。' / login ' 路由处理登录请求,并生成 JWT。' / protected ' 路由是受保护的,它需要一个有效的 JWT 才能访问。如果 JWT 无效或过期,服务器将返回 401 错误。
总结
JWT 为身份验证提供了一个安全的标准方式,适用于 RESTful API 方式的身份验证。JWT 的工作原理是将用户凭证(例如用户名和密码)转换为密钥,并将其存储在内存或数据库中。文章中给出了使用 Node.js 和 Express 框架来实现 JWT 身份验证的示例代码。最后,我们希望读者可以通过本文得到深度的学习和指导,帮助您在实践中更好地使用 JWT 来安全地实现 RESTful API 的身份验证。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64efed70f6b2d6eab39d6c90