HapiJS 的身份认证授权详解

阅读时长 12 分钟读完

如果你是一位前端开发者,你就应该了解 HapiJS 这个非常实用的工具。HapiJS 是一款基于 Node.js 的服务器框架,可以用于构建高效、可扩展的 Web 应用程序。它有许多功能,其中最有用的之一就是身份认证和授权。在本文中,我们将详细了解 HapiJS 的身份认证和授权功能,并提供实用的示例代码以帮助你学习和实现这些功能。

什么是身份认证?

身份认证是指确认用户是谁的过程。通常情况下,用户需要提供用户名和密码来进行身份验证。在 HapiJS 中,使用一些插件可以轻松地实现身份认证。

使用 hapi-auth-basic 插件进行基本认证

hapi-auth-basic 是 HapiJS 中的一个非常流行的插件,可以用于实现基本身份认证。它使用 HTTP Basic 认证,需要用户提供用户名和密码以进行身份验证。

首先,安装插件:

然后,在创建 HapiJS 服务器实例时,将该插件添加到 server.auth 中:

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

从上面的代码中可以看到,我们首先创建了一个包含用户的对象。然后,创建了一个 validate 函数,该函数获取传入的 username 和 password 并与用户数据进行比较,以确保用户凭据是有效的。最后,在 server.auth.strategy 中,我们使用了 hapi-auth-basic 插件并将 validate 函数作为参数传递。

最后,将 strategy 添加到路由选项中以确保路由需要身份验证。在上面的示例中,我们将其添加到根路径的路由中。

使用 hapi-auth-cookie 插件进行 Cookie 身份认证

除了使用基本身份认证外,HapiJS 还提供了其他类型的身份认证。其中之一是使用 Cookie 进行身份验证。要使用此方法,我们需要使用 hapi-auth-cookie 插件。

首先,安装插件:

然后,将该插件添加到 server.auth 中:

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

从上面的代码中可以看到,我们使用了 hapi-auth-cookie 插件,并将 Cookie 配置项传递到 server.auth.strategy 中。这告诉 HapiJS 如何使用 Cookie 进行身份验证。然后,我们定义了一个 validate 函数,该函数通过 username 查找用户数据以确保 Cookie 是有效的。

最后,在路由选项中,我们将 auth 设置为 session。这告诉 HapiJS 这个路由需要使用 session 策略进行身份认证。

什么是身份授权?

身份授权是为特定用户或用户组分配特定权限的过程。当用户被授权时,他们可以访问给定的资源。HapiJS 提供了许多用于实现身份授权的插件。

使用 hapi-authorization 插件进行身份授权

hapi-authorization 是 HapiJS 中非常流行的授权插件之一。它可以使用角色、权限等进行授权。

首先,安装插件:

然后,在创建 HapiJS 服务器实例时,将该插件添加到 server.auth 中:

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

在上面的代码中,我们创建了包含用户数据的用户数组。然后,创建了 validate 函数,该函数用于检查用户是否有效,并在成功时返回包含用户 ID、用户名和角色的凭据。

然后,我们将 hapi-authorization 插件添加到 server.auth 中并将该策略定义为默认策略。最后,我们使用 HapiJS 控制器将路由添加到服务器实例中。

使用 hapi-acl-auth 插件进行 ACL 身份授权

除了使用 hapi-authorization 进行身份验证外,HapiJS 还提供了其他类型的身份授权。其中之一是使用基于角色的访问控制列表(ACL)进行授权。要使用此方法,我们需要使用 hapi-acl-auth 插件。

首先,安装插件:

然后,在创建 HapiJS 服务器实例时,将该插件添加到 server.auth 中:

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

从上面的代码中可以看到,我们创建了 ACL 常量,该常量包含每个角色可以执行的操作。然后,创建了 validate 函数来检查用户凭证是否有效。接下来,将 hapi-acl-auth 插件添加到 server.auth 中,并使用常规的基本身份验证策略。

接下来,将路由添加到服务器中,并创建一个 isAuthorized 装饰器,该装饰器用于检查是否已将给定角色授权执行特定操作。

总结

在本文中,我们深入了解了 HapiJS 的身份认证和授权功能。我们讨论了如何使用基本身份认证和 Cookie 身份认证进行身份认证,并介绍了如何使用 hapi-authorization 插件和基于角色的 ACL 进行授权。我们还提供了实用的示例代码以帮助你学习和理解这些概念。使用 HapiJS,你可以轻松地组织和保护你的 Web 应用程序,确保只有经过身份验证和授权的人员才能访问敏感信息。

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

纠错
反馈