如何在 Fastify 中设置 JWT 过期时间

阅读时长 7 分钟读完

在开发 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 插件。

安装完成后,在 Fastify 应用程序中注册插件:

在上面的例子中,我们注册了 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 的有效期,可以是一个数字或字符串。

在上面的例子中,我们指定了 JWT 的过期时间为 1 小时。如果 JWT 的过期时间已经过了,jwt.verify() 方法将抛出一个错误。

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

在上面的例子中,我们在 jwt.verify() 方法的错误处理程序中检查错误消息是否为 jwt expired。如果是,我们将返回一个 401 错误,表示 JWT 已过期。

结论

在 Fastify 中使用 JWT 非常简单,但是设置 JWT 过期时间需要一些额外的步骤。通过设置 JWT 的过期时间,我们可以增加应用程序的安全性,防止未经授权的访问。希望这篇文章对你有所帮助!

完整示例代码

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

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

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

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

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

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

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/675e5fccc52bb7191765af9a

纠错
反馈