Hapi框架的身份验证插件——hapi-auth-jwt2使用说明

阅读时长 6 分钟读完

身份验证是现今 Web 开发中必不可少的一项安全性措施,而 Hapi 框架作为现今流行的 Node.js Web 框架之一,也提供了一系列的身份验证机制。其中,hapi-auth-jwt2 是一个相当强大的身份验证插件,支持 JSON Web Token(JWT)。

JWT 简介

JSON Web Token(JWT)是一种用于安全传输信息的开放标准(RFC 7519)。它通常由三部分组成:头部、有效负载和签名。

  • 头部:一般规定了使用 JWT 的算法及其他元数据。
  • 有效负载:通常包含了用户信息等相关数据。
  • 签名:将头部和有效负载用一定的算法(如 HMAC)签署起来,以防信息被篡改。

JWT 的优点在于它不需要使用服务器端保存 session,使得 JWT 能够适用于分布式系统或者前后端分离的情况。

hapi-auth-jwt2 简介

hapi-auth-jwt2 是一个用于 Hapi 框架的 JWT 身份验证插件。它提供了以下的安全特性:

  • 颁发、验证 JWT
  • 缓存非法 JWT
  • 实时撤销 JWT
  • 记录日志并生成审计记录

本文将结合示例代码,详细介绍 hapi-auth-jwt2 如何使用。

使用步骤

安装 hapi-auth-jwt2

在使用 hapi-auth-jwt2 前,需要在项目中安装 hapi-auth-jwt2 模块。

注册 hapi-auth-jwt2 插件

在注册 hapi-auth-jwt2 插件时,需要先定义一个策略。

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

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

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

   -- ----
--

-------

在这段代码中,我们注册了 hapi-auth-jwt2 插件,并定义了一个名为 jwt 的认证策略。在该认证策略中,我们指定了 JWT 的属性:密码键 key,有效载荷的解码函数 validate 和验证 JWT 的算法 verifyOptions

应用认证策略

经过以上操作,在服务器上定义了一个策略。但是,并不是所有的路由都需要使用该策略。需要在需要访问受限资源的路由上应用该策略。

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

在该代码片段中,我们定义了一个 GET /restricted 的路由,并应用了上面定义的 jwt 认证策略。这意味着,用户必须在请求头中携带 JWT 以访问该路由。

JWT 颁发

在用户的登录顺利完成后,服务器需要颁发一个符合规范的 JWT 给客户端以便后续访问。在颁发 JWT 时,建议在其中设置一个有效期,使得无人接触的 JWT 在一定时间内自动失效,防止攻击者利用过期的 JWT 访问受保护的路由。

上面的代码中,我们使用 jsonwebtoken 模块发放 JWT。在颁发 JWT 中添加了受浪费路径的有效期。

JWT 解码

一旦客户端使用 JWT 成功访问了一个受限的路由,服务器需要检验 JWT 是否是合法的。在检验过程中,需要对 JWT 进行解码操作。这可以通过调用 verifyJwt 方法:

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

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

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

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

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

在这段代码中,我们使用 jsonwebtoken 模块验证了 JWT,并且成功地解码了其中的有效负载。解码操作会返回一个对象,其中包含了 JWT 中的有效属性以及签发时间和过期时间。

总结

hapi-auth-jwt2 插件为我们的 Web 应用程序提供了方便、强大的身份验证机制,并且减少了应用程序状态维护的开销。本文详细介绍了使用 hapi-auth-jwt2 的完整过程。希望读者们能够从本文中学到 something new 并启发到自己的实践。

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

纠错
反馈