Hapi.js 中的 JWT 验证

阅读时长 5 分钟读完

在 Web 应用程序中,身份验证是非常重要的。而一种流行的身份验证方式是 JSON Web Tokens(JWTs)。在 Hapi.js 中,使用 JWTs 进行身份验证也是非常简单的。本文将介绍 Hapi.js 中 JWT 验证的基本原理、使用方法、实现方式以及相关问题。

什么是 JWT?

JSON Web Token(JWT)是一种用于在网络应用之间安全传递声明的基于 JSON 的开放标准。JWT 可以通过网络传输,并且用于验证传输的数据是否经过了身份验证和是否可以信任。通常被用于登录认证、单点登录等场景。

在 JWT 中,有三个部分:

  • Header(头部):存储 JWT 使用的算法和类型信息。
  • Payload(负载):存储包含声明(claims)信息和其他数据。
  • Signature(签名):使用密钥对 Header 和 Payload 进行签名生成的一段字符串,用于验证数据的完整性。

使用 JWT 的好处是,可以将用户信息存储在 JWT 中,而不需要再发起一次数据库查询。这样,就可以减轻服务器的负担。

使用 Hapi.js 实现 JWT 验证

Hapi.js 是一个构建 Web 应用的 Node.js 框架,它提供了非常方便的 JWT 验证功能。下面是一个使用 Hapi.js 实现 JWT 验证的示例代码:

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

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

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

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

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

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

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

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

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

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

-------

以上代码中,我们首先定义了 JWT 的密钥和用户信息。接着,编写了一个 validateUser 方法,用于验证 JWT 是否合法。最后,使用 server.auth.strategy 方法定义了一个 JWT 验证的策略,并将其应用到路由中。

处理 JWT 过期

一般情况下,JWT 都会设置过期时间,以避免某个 JWT 被一直使用而不会过期,导致安全问题。在 Hapi.js 中,可以使用 jwt 验证策略的 options 参数来设置 JWT 的过期时间:

在以上代码中,expiresIn 参数用于设置 JWT 的过期时间,此处设置为 30 分钟。如果 JWT 已经过期,则该 JWT 将不再被验证。

处理路由级别的权限

在有些场景中,只有特定角色的用户才有权限访问某些页面或 API。在 Hapi.js 中,可以通过修改 validateUser 方法来实现这一功能。例如,我们可以在 users 对象中增加一个 role 字段,然后在 validateUser 方法中判断该用户是否具有访问权限:

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

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

通过以上代码,我们只允许具有 admin 角色的用户访问该路由。

小结

在本文中,我们介绍了在 Hapi.js 中使用 JWT 进行身份验证的方法。JWT 不仅可以传递用户信息,而且还可以减轻服务器的负担。使用 Hapi.js 实现 JWT 验证非常简单,只需要使用 HapiAuthJwt 插件并定义策略即可。如果需要处理路由级别的权限,修改 validateUser 方法即可。

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

纠错
反馈