如何在 Hapi 中使用 JWT 认证

阅读时长 5 分钟读完

JSON Web Token(JWT)是一种用于 Web 应用程序的轻量级身份验证机制。它非常适合用于 API 身份验证,因为 JWT 是基于 token 的,可以传输在 HTTP 头部或 URL 查询参数中,非常方便。

Hapi 是一个 Node.js web 框架,它提供了很多有用的特性和插件,非常适合用于构建 RESTful API。本文将介绍如何在 Hapi 中使用 JWT 认证插件。

安装

首先,我们需要安装官方提供的 hapi-auth-jwt2 插件。

注册插件

在创建 Hapi 服务器实例之前,我们需要将这个插件注册到服务器中去。

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

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

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

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

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

-------

配置插件

我们需要在服务器启动前配置插件。

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

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

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

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

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

-------

上面的代码中,我们定义了一个名为 "jwt" 的认证策略,使用的是 jwt 签署算法,签名秘钥为 "my_very_secret_key"。在 validate 函数中,我们可以根据 JWT 载荷中的信息进行自定义验证。如果验证成功,返回 { isValid: true },否则返回 { isValid: false }。最后,我们将默认策略设置为 jwt

保护路由

我们可以在需要验证的路由上使用认证策略 "jwt":

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

上面的代码中,我们定义了一个 GET 请求的路由,路径为 "/protected"。在路由配置中,我们设置了 auth 选项为 "jwt",也就是应用上面定义的认证策略。这样,只有携带了有效的 JWT 令牌的请求才会执行该路由。

生成 JWT 令牌

使用 JWT 认证插件后,我们需要在客户端生成有效的 JWT 令牌并携带到服务端。以下是一个生成 JWT 令牌的示例代码:

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

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

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

总结

使用 hapi-auth-jwt2 插件可以很方便地实现 JWT 认证,只需要在服务器启动前注册插件并配置策略,就可以保护指定的路由了。同时,也需要在客户端生成有效的 JWT 令牌并携带到服务端。

由于 JWT 令牌是基于 token 的认证机制,需要注意的是,客户端需要保密、安全存储令牌,并仅将令牌用于请求受信任的服务器。

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

纠错
反馈