什么是 RESTful API
在 WEB 开发中,API 是应用程序编程接口的缩写,是软件系统中不同组件之间的交互的约定。它通过访问数据来执行某些功能,并使用特定的编程语言编写。
RESTful API 是一种基于 HTTP 协议的 API 设计风格,它将资源作为 URL 地址,支持 GET、POST、PUT 和 DELETE 等 HTTP 方法。这种设计风格强调资源的状态以及对状态进行操作的标准化。
开发人员可以使用 RESTful API 与远程服务器交互。客户端可以通过调用 URL 处理程序,将其连接到服务器,从而与 RESTful API 进行互动,以获得所需的信息。
什么是鉴权
在 RESTful API 中,鉴权是一种授权机制,用于对用户进行身份验证并授予对资源的权限。它是通过检查用户提供的令牌或凭据来确定用户是否具有访问资源的权限。
鉴权机制有很多种,包括 Basic、Digest、OAuth、JWT 等。其中, JWT 可以通过签发令牌,实现无状态共享,使其更易于实现和扩展。
如何使用 JWT 鉴权保护 RESTful API
安装和配置 jsonwebtoken 库
由于 JWT 是通过令牌进行鉴权的,因此我们需要安装 jsonwebtoken 库。可以通过以下命令进行安装:
npm install jsonwebtoken
在安装库之后,我们需要在代码中引入它,可以使用以下代码:
const jwt = require('jsonwebtoken');
生成 JWT 令牌
在 RESTful API 中,我们需要为每个用户生成唯一的 JWT 令牌。在生成 JWT 令牌之前,我们需要定义一个 payload 类型的对象,其中包含用户 ID 和过期时间等信息。以下是示例代码:
const payload = { id: '12345678', name: 'John Doe', exp: Math.floor(Date.now() / 1000) + (60 * 60) };
然后,我们可以使用以下代码来生成 JWT 令牌:
const token = jwt.sign(payload, 'secretkey');
其中,'secretkey' 是我们为 JWT 令牌定义的密钥。
验证 JWT 令牌
在 RESTful API 中,我们需要对传递的 JWT 令牌进行验证。为此,我们需要创建一个中间件函数来验证用户提供的令牌是否有效。以下是示例代码:
-- -------------------- ---- ------- -------------- - ------------- ---- ----- - ----- ----- - --------------------------------- ------ -- -------- - ------ ---------------------- -------- -------- ------ --- - --- - ----------------- ------------ ----- ----- -- - -- ----- - ------ ---------------------- -------- -------- ------ --- - -------- - ----- ------- --- - ----- ----- - ------ ---------------------- -------- -------- ------ --- - --
在上面的代码中,我们首先从请求头中获取 JWT 令牌并对其进行验证。如果令牌无效或无法识别,则返回 HTTP 状态码未经授权的请求(401)。
否则,我们将从令牌中解密用户数据,并将其存储在 req 对象中,以便在 API 中进行访问。
使用 JWT 鉴权保护 RESTful API
我们可以使用上面定义的中间件函数来保护我们的 RESTful API。以下是示例代码:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ---------- ----- ---- - ------------------ --------------------- ----- ----- ---- -- - -- - --- --------- ----- ---- - --------- -- ------ --- ---
在上面的代码中,我们通过在路由处理程序中添加 auth 中间件函数,来对用户进行身份验证。只有在 JWT 令牌有效时,我们才会处理用户请求,以保护我们的 RESTful API。
结论
在本文中,我们讨论了如何使用 JWT 鉴权机制保护 RESTful API。我们首先介绍了 RESTful API 和鉴权的基础知识。然后,我们讨论了如何使用 jsonwebtoken 库来生成和验证 JWT 令牌,并提供了示例代码。最后,我们通过一个示例向您演示了如何在 Express 应用程序中使用 JWT 鉴权保护 RESTful API。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6703019ad91dce0dc8496dac