在开发 Web 应用程序时,我们经常需要使用 JSON Web Tokens (JWT) 来实现身份验证和授权功能。JWT 是一种安全的方式,可以在客户端和服务器之间传输数据,并且可以防止数据被篡改。在 Fastify 中使用 JWT 非常简单,但是如何设置 JWT 过期时间呢?
什么是 JWT
JSON Web Token (JWT) 是一种基于 JSON 的开放标准 (RFC 7519),用于在网络上安全传输声明。JWT 由三部分组成:头部、载荷和签名。
- 头部:包含 JWT 的类型和使用的算法。
- 载荷:包含要传输的数据,例如用户 ID、角色等。
- 签名:使用密钥对头部和载荷进行签名,以确保 JWT 的完整性和真实性。
JWT 的优点是可以在客户端和服务器之间传输数据,而无需使用 Cookie 或其他会话机制。此外,JWT 还可以防止 CSRF 攻击。
在 Fastify 中使用 JWT
Fastify 是一个快速、低开销、可扩展的 Web 框架,它支持 JWT。要在 Fastify 中使用 JWT,需要安装 fastify-jwt
插件。
npm install fastify-jwt
安装完成后,在 Fastify 应用程序中注册插件:
const fastify = require('fastify')() fastify.register(require('fastify-jwt'), { secret: 'supersecret' })
在上面的例子中,我们注册了 fastify-jwt
插件,并指定了一个密钥。这个密钥将用于对 JWT 进行签名和验证。
接下来,我们可以在路由处理程序中使用 jwt.sign()
和 jwt.verify()
方法来生成和验证 JWT。
-- -------------------- ---- ------- ---------------------- ----- --------- ------ -- - ----- - --------- -------- - - ------------ -- -------------- -- --------- --- ------- -- -------- --- ----------- - ----- ----- - ------------------ -------- -- ------------ ----- -- - ---- - ------------------------ -------- -------------- -- - -- ------------------------- ----- --------- ------ -- - --- - ----- ------- - ----- ------------------------------------------------- ------------ -------- ------- --------------------- -- - ----- ----- - ------------------------ -------- -------------- -- - --
在上面的例子中,我们在 /login
路由处理程序中生成 JWT,并在 /protected
路由处理程序中验证 JWT。如果 JWT 无效或已过期,则会返回 401 错误。
设置 JWT 过期时间
默认情况下,fastify-jwt
插件生成的 JWT 没有过期时间。这意味着 JWT 将一直有效,直到被撤销或密钥被更改。为了增加安全性,我们可以设置 JWT 的过期时间。
要设置 JWT 过期时间,可以在 fastify-jwt
插件的选项中指定 expiresIn
属性。expiresIn
属性表示 JWT 的有效期,可以是一个数字或字符串。
fastify.register(require('fastify-jwt'), { secret: 'supersecret', sign: { expiresIn: '1h' } })
在上面的例子中,我们指定了 JWT 的过期时间为 1 小时。如果 JWT 的过期时间已经过了,jwt.verify()
方法将抛出一个错误。
-- -------------------- ---- ------- ------------------------- ----- --------- ------ -- - --- - ----- ------- - ----- ------------------------------------------------- ------------ -------- ------- --------------------- -- - ----- ----- - -- ------------ --- ---- --------- - ------------------------ -------- ------ -------- -- - ---- - ------------------------ -------- -------------- -- - - --
在上面的例子中,我们在 jwt.verify()
方法的错误处理程序中检查错误消息是否为 jwt expired
。如果是,我们将返回一个 401 错误,表示 JWT 已过期。
结论
在 Fastify 中使用 JWT 非常简单,但是设置 JWT 过期时间需要一些额外的步骤。通过设置 JWT 的过期时间,我们可以增加应用程序的安全性,防止未经授权的访问。希望这篇文章对你有所帮助!
完整示例代码
-- -------------------- ---- ------- ----- ------- - -------------------- ---------------------------------------- - ------- -------------- ----- - ---------- ---- - -- ---------------------- ----- --------- ------ -- - ----- - --------- -------- - - ------------ -- -------------- -- --------- --- ------- -- -------- --- ----------- - ----- ----- - ------------------ -------- -- ------------ ----- -- - ---- - ------------------------ -------- -------------- -- - -- ------------------------- ----- --------- ------ -- - --- - ----- ------- - ----- ------------------------------------------------- ------------ -------- ------- --------------------- -- - ----- ----- - -- ------------ --- ---- --------- - ------------------------ -------- ------ -------- -- - ---- - ------------------------ -------- -------------- -- - - -- -------------------- ----- -------- -- - -- ----- - ------------------ --------------- - ------------------- --------- -- ------------ --
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/675e5fccc52bb7191765af9a