在现代的 Web 开发中,认证鉴权是一个不可避免的话题。JWT(JSON Web Token)是一种常用的认证方式,它可以在客户端和服务端之间安全地传递用户身份信息。Fastify 是一个高性能的 Node.js Web 框架,本文将介绍在 Fastify 框架下实现 JWT 认证的方法。
JWT 认证流程
在了解具体实现之前,我们先来简要介绍一下 JWT 认证的基本流程:
- 用户在客户端提供用户名和密码。
- 服务端验证用户名密码,生成一个 JWT,并将其发送回客户端。
- 客户端将 JWT 存储在本地,并在每次请求服务端时添加到请求头中。
- 服务端在接收请求时验证 JWT,从而识别用户身份。
一个 JWT 由三部分组成:头部、载荷和签名。其中,头部和载荷都是 JSON 格式的信息,签名是用于验证身份的一串字符串。JWT 的结构如下所示:
header.payload.signature
在头部中一般包含两个信息:算法类型和 token 类型。载荷中存储的是一些自定义的信息,如用户 ID、用户名等。服务端使用头部中指定的算法和签名密钥对头部和载荷进行签名,从而保证 JWT 的可靠性。
Fastify 框架实现 JWT 认证
在实现 JWT 认证时,我们需要使用到两个包:fastify-jwt
和 jsonwebtoken
。前者是 Fastify 官方提供的插件,用于简化 JWT 的生成和校验;后者是 JWT 的核心库,用于 JWT 的签名和解密操作。
首先我们需要安装这两个包:
npm install fastify-jwt jsonwebtoken
在 Fastify 应用中使用 JWT 插件非常简单,只需要以下几步:
- 引入
fastify-jwt
插件和jsonwebtoken
库:
const fastify = require('fastify')() const jwt = require('fastify-jwt') const jwtDecode = require('jsonwebtoken')
- 注册插件,并指定签名密钥:
fastify.register(jwt, { secret: 'my secret key' })
- 在处理请求时添加认证验证操作,并生成 JWT:
-- -------------------- ---- ------- ---------------------- ----- --------- ------ -- - ----- - --------- -------- - - ------------ -- ---------- ----- ------- - - --- ---- -------- - -- ------- ----- ----- - ----- ---------------------- -- -- --- ------------ ----- -- --
- 在其他路由中添加 JWT 校验操作:
fastify.get('/user', { preValidation: fastify.auth([fastify.verifyJWT]) }, async (request, reply) => { const decodedJWT = jwtDecode.decode(request.raw.headers.authorization.slice(7)) // 解析 JWT reply.send({ user: { id: decodedJWT.id, username: decodedJWT.username } }) })
通过以上几步,我们就可以轻松地在 Fastify 应用中实现 JWT 认证了。
总结
在本文中,我们介绍了 JWT 认证的基本流程和 Fastify 框架下实现 JWT 认证的方法。通过使用 fastify-jwt
插件和 jsonwebtoken
库,我们可以非常简单地实现 JWT 认证。希望本文能够对你理解 JWT 认证及 Fastify 框架有所帮助,并在实际开发中加以应用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64df1a77f6b2d6eab3a432ec