使用 Fastify 和 JWT 实现轻松的 API 授权和身份验证

阅读时长 5 分钟读完

什么是 Fastify

Fastify 是一个用于构建高效且低开销的 Node.js Web 应用程序的 Web 框架。它是基于 Express 开发而来,通过使用先进的技术和优秀的性能来弥补一些 Express 的缺点。Fastify 主要面向的是场景是 API 或微服务。

Fastify 的主要特点有:

  • 高效性:Fastify 的请求时间和内存使用都非常少,这使得它特别适用于处理高负载应用程序;
  • 强大的插件体系结构:每个插件都是独立的,可以在应用程序中轻松安装和配置;
  • 支持异步/await:Fastify 支持 Promise,Async 和 Await,可以让开发人员轻松编写异步代码。

什么是 JWT

JSON Web Token (JWT) 是一种用于安全地传输数据的开放标准 (RFC 7519)。JWT 适用于分布式环境中的身份验证和授权,是对于会话 Cookies 常用的替代方案,仅仅是前端使用的普通 remeber-me 标志的加强版。

JWT 可以用于下列场合:

  • 身份认证
  • 授权

JWT 由三个部分组成:

  • Header:代表 JWT 的元数据;
  • Payload:代表包含有关实体 (通常是用户) 的声明和信息;
  • Signature:JWT 的签名用于验证消息的完整性。

如何使用 Fastify 和 JWT 实现 API 授权和身份验证

安装依赖

首先我们需要安装需要依赖的包——fastify 和jsonwebtoken:

添加路由

我们必须添加一个路由来执行身份验证并返回JWT。假设我们的应用程序有一个用户模型。我们将使用用户名和密码进行身份验证,并在成功的情况下返回 JWT。

-- -------------------- ---- -------
----- ---------- - ----------------

---------------------- ----- --------- ------ -- -
  ----- - --------- -------- - - ------------
  ----- ---- - ----- -------------- -------- ---------

  -- ------ -- ------------- --- --------- -
    ---------------------- ------ -------- ------------ --
    ------
  -

  ----- ----- - ---------- ------- -------- -- -----------

  ------------ ----- --
--
展开代码

添加授权中间件

Express 偏重于中间件。Fastify 也支持中间件,可以提高应用程序的灵活性和可组织性。所以我们需要添加一个中间件来验证 JWT。

-- -------------------- ---- -------
----- -------- ---------------- ------ -
  ----- ----- - --------------------------------
  -- ------ --- --------- -- ------------------------- --- -
    ---------------------- ------ --- ----- --------- --
    ------
  -

  ----- ------ - ------------------- -----
  --- -
    ----- ------- - ------------------ -----------
    ----- - ------ - - -------
    ----- ---- - ----- ----------------------------
    -- ----- -- ----- -
      ----- --- -------
    -
  - ----- ----- -
    ---------------------- ------ -------------- --
    ------
  -
-
展开代码

在这个中间件中,我们首先检查是否存在 JWT,如果不是,则返回401错误。 如果存在,则解码 JWT 并使用其有效负载字段查找用户。 如果找到用户并且 JWT 验证成功,则继续处理请求。

使用授权中间件

现在我们需要使用中间件,因为对于网站的许多端点,只有经过身份验证的用户可以访问它们。 在调用路由处理程序之前执行中间件,因此要在路由处理程序中添加中间件。

例如:

-- -------------------- ---- -------
------------------------ - ----------- ------- -- ----- --------- ------ -- -
  ----- - -- - - --------------
  ----- ---- - ----- ------------------------

  -- ----- -- ----- -
    ---------------------- ------ ---- ------ --
    ------
  -

  ------------ ---- --
--
展开代码

结论

在本文中,我们介绍了 Fastify 和 JWT 的基础知识,并演示了如何在 Fastify 应用中使用 JWT 来进行身份验证和授权。

Fastify 提供了一个轻量级和快速的 API 框架,这意味着能够更快地处理和传输请求和响应。借助 JWT,我们可以更好地在项目中实现身份验证和授权,提高应用程序的安全性。

这种方法可以用于现代 JavaScript 框架,例如 Vue、Angular 和 React,以构建安全、可靠和高效的 Web 应用程序。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67146e3bad1e889fe213c546

纠错
反馈

纠错反馈