Hapi中集成JSON Web Token 验证教程

引言

JSON Web Token 是在客户端和服务器之间进行身份验证和授权的一种标准化协议。在现代化的 Web 应用中,身份验证和授权是必不可少的部分,因此在我们的服务器端应用中使用 JWT 是非常常见的。

在本篇文章中,我们将学习如何在 Hapi 应用中使用 JWT 进行身份验证。

参考资料

安装依赖

在开始集成 JWT 之前,我们需要安装以下依赖:

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

这将安装 Hapi、Joi 和 Jsonwebtoken 包。

创建 JWT

要创建 JWT,我们将使用 jsonwebtoken 包提供的 sign 方法。下面是一个示例:

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

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

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

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

在这个例子中,我们创建了一个包含 username 属性的负载对象,然后用 'mysecret' 作为密钥签名它。expiresIn 选项告诉JWT令牌将在1天后过期。最后,我们通过控制台打印出令牌。

集成JWT

在 Hapi 应用程序中,我们将使用 hapi-auth-jwt2 插件集成 JWT。

首先,我们需要在我们的项目中安装该插件:

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

接下来,在我们的 server.js 中引入所需的组件:

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

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

接下来,我们注册插件:

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

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

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

在这里,我们定义了 validate 方法,它将被用于验证令牌。我们使用 hapi-auth-jwt2 插件注册了 JWT 验证方案和默认策略。接下来,我们使用 server.auth.default() 方法为所有路由设置默认的授权策略。

现在我们已经在 Hapi 应用程序中成功集成了 JWT 验证。

实现身份验证

让我们通过一个简单的示例来理解如何使用 JWT 进行身份验证。

我们将创建一个简单的 API、它包含一个受保护的路由,它只能在用户提供有效 JWT 时访问。

下面是示例代码:

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

在这个例子中,我们定义了一个 GET 请求的路由 /api/protected。我们通过将 auth 选项设置为 jwt 来保护它。这标志着该路由需要一个有效的 JWT 令牌才能访问。

接下来,我们需要在客户端发出请求时正确设置 JWT。

下面是一个创建 JWT 并在请求中发送它的例子:

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

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

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

在这个例子中,我们使用之前创建的 JWT 将它添加到请求头中作为 Bearer 令牌。

结论

现在,我们已经成功为 Hapi 应用程序集成了 JWT 验证。JWT 提供了一种安全而简单的方式对用户进行身份验证和授权。我们可以使用 hapi-auth-jwt2 插件轻松集成 JWT 使用。

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