在现代 Web 应用程序开发中,认证和授权是不可或缺的一部分,它们可以确保我们的服务器只能被授权的用户访问。JSON Web Token (JWT) 是一种常见的认证/授权方案,它可以在不同的系统之间方便地传递验证信息。而 Fastify 是一个快速,低开销和可扩展的 Node.js Web 框架,可以使用各种插件来扩展其功能。在本文中,我们将讨论如何在 Fastify 中使用 JWT 认证插件来确保服务器安全。
安装 Fastify 和 JWT 插件
首先需要安装 fastify
和 fastify-jwt
库。我们可以使用 npm
命令行或者 yarn
进行安装:
npm install fastify fastify-jwt
yarn add fastify fastify-jwt
使用 JWT 插件
Fastify-JWT 的使用非常简单,只需要用插件注册到 Fastify 实例上即可。插件将修改 Fastify 实例以便在所有路由上添加 JWT 验证,代码如下:
const fastify = require('fastify')() fastify.register(require('fastify-jwt'), { secret: 'supersecret' })
fastify-jwt
插件需要一个密码,用于在生成和验证 JWT 时签名。我们需要确保将其存储在安全的地方,以免在服务器被入侵时泄露。
使用 JWT 进行身份验证
一旦我们注册了 JWT 插件,就可以使用它来确保我们的路由只能由经过身份验证的用户访问。基本上,我们需要通过向客户端颁发 JWT,然后在每个请求中使用此 JWT 进行身份验证来实现此目的。
我们可以通过一个登录接口来颁发 JWT,以下是一个示例代码:
-- -------------------- ---- ------- ---------------------- ----- --------- ------ -- - ----- - --------- -------- - - ------------ -- ------ ----- ----- - ----- ------------------ --------- ------- -- ------------ ----- -- --
在此示例中,我们假定用户根据用户名和密码进行身份验证,然后用 fastify.jwt.sign
函数签署一个包含用户名的 JWT。最后,我们将 JWT 作为 JSON 对象发送回客户端。
现在,为了验证要求每个请求必须携带有效的 JWT,我们需要在我们的受保护路由上使用一个名为 jwt
的 fastify 插件,如下所示:
fastify.get('/protected', { preValidation: fastify.authenticate }, async (request, reply) => { reply.send({ message: 'Hello, Alice!' }) })
注意,我们使用 fastify.authenticate
代替了 preHandler
,因为 fastify-jwt
插件将在身份验证之前执行一些额外的步骤。如果 JWT 未经身份验证或者 JWT 无效,它将返回一个适当的 HTTP 响应码。
结论
在本文中,我们介绍了如何在 Fastify 中使用 JWT 插件来确保服务器安全。我们学习了如何使用 fastify-jwt
插件来颁发 JWT,以及如何使用 fastify.authenticate
插件在安全的路由中进行身份验证。我们的示例不仅提供了有价值的信息,还为有意探索 Fastify 和 JWT 认证的读者提供了一个良好的起点。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67306e9aeedcc8a97c91e5ea