如何在 Fastify 中使用 JWT 认证中间件来确保服务器安用

在现代 Web 应用程序开发中,认证和授权是不可或缺的一部分,它们可以确保我们的服务器只能被授权的用户访问。JSON Web Token (JWT) 是一种常见的认证/授权方案,它可以在不同的系统之间方便地传递验证信息。而 Fastify 是一个快速,低开销和可扩展的 Node.js Web 框架,可以使用各种插件来扩展其功能。在本文中,我们将讨论如何在 Fastify 中使用 JWT 认证插件来确保服务器安全。

安装 Fastify 和 JWT 插件

首先需要安装 fastifyfastify-jwt 库。我们可以使用 npm 命令行或者 yarn 进行安装:

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

使用 JWT 插件

Fastify-JWT 的使用非常简单,只需要用插件注册到 Fastify 实例上即可。插件将修改 Fastify 实例以便在所有路由上添加 JWT 验证,代码如下:

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

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

fastify-jwt 插件需要一个密码,用于在生成和验证 JWT 时签名。我们需要确保将其存储在安全的地方,以免在服务器被入侵时泄露。

使用 JWT 进行身份验证

一旦我们注册了 JWT 插件,就可以使用它来确保我们的路由只能由经过身份验证的用户访问。基本上,我们需要通过向客户端颁发 JWT,然后在每个请求中使用此 JWT 进行身份验证来实现此目的。

我们可以通过一个登录接口来颁发 JWT,以下是一个示例代码:

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

  -- ------

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

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

在此示例中,我们假定用户根据用户名和密码进行身份验证,然后用 fastify.jwt.sign 函数签署一个包含用户名的 JWT。最后,我们将 JWT 作为 JSON 对象发送回客户端。

现在,为了验证要求每个请求必须携带有效的 JWT,我们需要在我们的受保护路由上使用一个名为 jwt 的 fastify 插件,如下所示:

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

注意,我们使用 fastify.authenticate 代替了 preHandler,因为 fastify-jwt 插件将在身份验证之前执行一些额外的步骤。如果 JWT 未经身份验证或者 JWT 无效,它将返回一个适当的 HTTP 响应码。

结论

在本文中,我们介绍了如何在 Fastify 中使用 JWT 插件来确保服务器安全。我们学习了如何使用 fastify-jwt 插件来颁发 JWT,以及如何使用 fastify.authenticate 插件在安全的路由中进行身份验证。我们的示例不仅提供了有价值的信息,还为有意探索 Fastify 和 JWT 认证的读者提供了一个良好的起点。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/67306e9aeedcc8a97c91e5ea