如何在 Hapi.js 中使用 OAuth 2.0 进行身份验证?

OAuth 2.0 是一种流行的用于身份验证和授权的开放标准。在前端开发中,我们经常需要使用 OAuth 2.0 来验证用户身份。在本文中,我们将介绍如何在 Hapi.js 中使用 OAuth 2.0 进行身份验证。

OAuth 2.0 简介

OAuth 2.0 是一个基于授权的开放标准,由互联网工程任务组(IETF)定义。该标准旨在允许用户授权第三方访问其资源,而无需共享其凭据。OAuth 2.0 适用于各种情况,包括 Web 应用程序、移动应用程序等。

OAuth 2.0 授权流程包括以下步骤:

  1. 用户向应用程序提供他们的凭证(例如用户名和密码或 API 密钥)。
  2. 应用程序使用凭据向 OAuth 2.0 服务器发出请求以获取访问令牌。
  3. OAuth 2.0 服务器验证凭据,并向应用程序颁发访问令牌。
  4. 应用程序使用访问令牌访问受保护的资源。

在 Hapi.js 中使用 OAuth 2.0

在 Hapi.js 中使用 OAuth 2.0 进行身份验证需要安装 bellhapi-auth-cookie 插件。

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

配置 OAuth 2.0 提供程序

我们需要为 Hapi.js 配置 OAuth 2.0 提供程序。在这里,我们使用 GitHub 作为示例提供程序。请按照以下步骤注册 OAuth 应用程序:

  1. 登录到 GitHub 帐户并转到“设置”>“开发人员设置”>“OAuth 应用程序”。
  2. 单击“新 OAuth 应用程序”按钮。
  3. 输入应用程序名称、主页 URL 和回调 URL(例如 http://localhost:3000/auth/github/callback)。
  4. 单击“注册应用程序”按钮。

GitHub 将生成一个客户端 ID 和客户端密钥,并将其显示在 OAuth 应用程序详细信息页面上。将这些凭据复制到你的 Hapi.js 配置文件中:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-------

路由保护

路由保护是使用 Hapi.js 进行身份验证的关键步骤。在本例中,我们通过以下方式保护客户端路由:

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

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

模式 try 允许未经身份验证的用户访问资源,但仅限于 request.auth.credentials 对象中未包含凭据信息的情况。我们使用 credentials.username 获取已登录用户的用户名。

认证回调

为了使 GitHub 认证工作,我们需要定义一个路由来处理认证回调:

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

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

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

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

在这里,当 GitHub 认证成功后,我们将 usernameidemail 存储在 Hapi.js 的 cookie 中。在后续请求中,我们可以使用 request.auth.credentials 访问这些信息。

注销

注销代码示例如下所示:

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

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

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

request.cookieAuth.clear() 中注销 cookie 并重定向到主页。

结论

在本文中,我们介绍了如何在 Hapi.js 中使用 OAuth 2.0 进行身份验证。我们了解了 OAuth 2.0 的简介,并详细介绍了如何在 Hapi.js 中配置 OAuth 2.0 提供程序、路由保护、认证回调和注销。希望本文对你有帮助,欢迎留言讨论!

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