Hapi 框架中使用 JWT 进行用户认证教程

阅读时长 6 分钟读完

在 Web 应用程序中,对用户进行身份验证和授权是一项核心功能。JWT 是一种标准化的身份验证和授权方法,可以用于跨域场景和个人用户的 Web 访问授权。Hapi 框架是一个基于 Node.js 的 Web 开发框架,可以方便地构建 Web 应用程序。在本文中,我们将介绍如何在 Hapi 框架中使用 JWT 进行用户认证。

什么是 JWT?

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在各方之间安全地传输信息,可以用于授权和身份验证。JWT 通常由三部分组成:头部、负载以及签名。头部通常包括声明的类型(JWT)和算法(例如 HMAC SHA256)的声明。负载包含声明,这些声明表示某些实体(通常是用户)和其他元数据。签名对头部和负载进行加密,以防止被篡改。

使用 Hapi 框架实现用户认证

基于 JWT 实现用户认证需要进行以下几个步骤:

  1. 认证用户并生成 JWT
  2. 验证 JWT
  3. 在 Hapi 路由中使用 JWT 保护路由

1. 认证用户并生成 JWT

在 Hapi 框架中,通常使用 hapi-auth-jwt2 插件来处理 JWT 认证。首先需要安装该插件:

接下来,在 Hapi 服务器实例中注册该插件:

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

这里需要编写 validationFunction 函数来实现验证 JWT 的逻辑。该函数接收三个参数:decoded(解码后的 JWT 负载)、request(来自客户端的请求)和 h(回复工具包)。该函数应该检查 JWT 的凭证,例如,检查用户是否存在、用户的权限等等,并返回 { isValid: true } 或者 { isValid: false }

当用户进行登录时,负责生成 JWT 的路由处理程序应该如下所示:

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

2. 验证 JWT

验证 JWT 的逻辑已经在 validationFunction 函数中实现。 validationFunction 接收解码后的 JWT 负荷作为第一个参数,并且应该返回一个包含 isValid 属性的对象,表示 JWT 是否有效:

在这个例子中,我们获取了 JWT 解码后的 ID 属性,并使用其作为参数来查询用户。如果找到了与 JWT 对应的用户,我们将返回一个包含 isValid: true 属性的对象。我们还可以在 credentials 属性中设置 JWT 的负载,以供进一步的路由处理时使用。

3. 在 Hapi 路由中使用 JWT 保护路由

完成以上步骤后,我们可以使用 hapi-auth-jwt2 插件来保护某些路由,以确保只有验证过的用户才能访问该路由。在 Hapi 框架中,使用 auth 选项来声明此类路由:

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

在这个例子中,我们通过在路由选项中设置 auth: 'jwt' 来保护 /user 路由。它只有在请求在头部包含 Authorization 属性,并带有有效的 JWT 时才会被执行。

总结

在本篇文章中,我们介绍了如何在 Hapi 框架中使用 JWT 进行用户认证。我们讨论了如何生成和验证 JWT,并演示了如何使用 Hapi 路由中的 auth 选项来保护路由。JWT 提供了一个灵活的、安全的机制,可用于保护用户数据和 Web 应用程序的动态内容。我们希望本文对于您了解 JWT 在 Hapi 框架中的使用有所帮助。

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

纠错
反馈