如何在 Fastify 框架中实现 JWT 身份验证?

Fastify 是一个快速、低开销且可扩展的 Web 框架,适用于构建高性能 Web 应用程序。在实际开发中,我们通常需要对用户进行身份验证,以确保只有授权的用户才能访问受保护的资源。JWT(JSON Web Token)是一种广泛使用的身份验证机制,它可以在不使用服务器端存储的情况下验证用户身份。在本文中,我们将介绍如何在 Fastify 框架中实现 JWT 身份验证。

JWT 简介

JWT 是一种基于 JSON 的开放标准(RFC 7519),用于在网络应用程序之间安全地传输声明。JWT 通常用于身份验证和授权。JWT 由三部分组成:头部、载荷和签名。头部包含 JWT 类型和使用的算法;载荷包含实际的声明,如用户 ID、用户名和过期时间;签名用于验证 JWT 的完整性。JWT 可以在客户端和服务器之间安全地传输,并且不需要存储在服务器上。

实现 JWT 身份验证

在 Fastify 框架中实现 JWT 身份验证需要以下步骤:

步骤 1:安装依赖

首先,我们需要安装 fastify-jwtjsonwebtoken 两个依赖项。fastify-jwt 是一个 Fastify 插件,用于生成和验证 JWT。jsonwebtoken 是一个 JSON Web Token 库,用于生成和验证 JWT。

npm install fastify-jwt jsonwebtoken --save

步骤 2:注册插件

在 Fastify 应用程序中注册 fastify-jwt 插件,并配置 JWT 密钥和选项。以下是一个示例代码:

const fastify = require('fastify')()

fastify.register(require('fastify-jwt'), {
  secret: 'supersecret'
})

在上面的代码中,我们将 fastify-jwt 插件注册到 Fastify 应用程序中,并设置 JWT 密钥为 supersecret

步骤 3:实现身份验证路由

现在,我们可以创建一个受保护的路由,该路由需要进行身份验证才能访问。以下是一个示例代码:

fastify.get('/protected', {
  preValidation: fastify.authenticate
}, (request, reply) => {
  reply.send({ message: 'Hello, protected world!' })
})

在上面的代码中,我们使用 fastify.authenticate 预处理程序来验证 JWT。fastify.authenticate 验证 JWT 并将 request.user 对象设置为有效载荷(payload)。

步骤 4:实现身份验证

现在,我们需要实现身份验证。以下是一个示例代码:

fastify.decorate('authenticate', async function (request, reply) {
  try {
    await request.jwtVerify()
  } catch (err) {
    reply.send(err)
  }
})

在上面的代码中,我们使用 fastify.decorate 方法将 authenticate 方法添加到 Fastify 应用程序中。authenticate 方法使用 request.jwtVerify() 方法来验证 JWT。如果 JWT 无效,则将错误发送回客户端。

步骤 5:生成 JWT

现在,我们需要生成 JWT。以下是一个示例代码:

fastify.post('/login', async (request, reply) => {
  const { username, password } = request.body

  // Validate user credentials
  const user = await validateCredentials(username, password)

  if (!user) {
    reply.status(401).send({ message: 'Invalid credentials' })
    return
  }

  // Generate JWT
  const token = fastify.jwt.sign({ id: user.id })

  reply.send({ token })
})

在上面的代码中,我们创建一个 /login 路由来验证用户凭据并生成 JWT。如果用户凭据无效,则返回状态码 401。如果用户凭据有效,则使用 fastify.jwt.sign 方法生成 JWT,并将其发送回客户端。

总结

本文介绍了如何在 Fastify 框架中实现 JWT 身份验证。我们首先安装了 fastify-jwtjsonwebtoken 两个依赖项,然后注册了 fastify-jwt 插件,并配置了 JWT 密钥和选项。接下来,我们创建了一个受保护的路由,并使用 fastify.authenticate 预处理程序来验证 JWT。最后,我们实现了身份验证和 JWT 生成代码。通过本文,我们可以了解如何在 Fastify 应用程序中使用 JWT 身份验证来保护受保护的资源。

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


纠错
反馈