Hapi 中如何使用 JWT 进行身份验证?

阅读时长 6 分钟读完

随着前后端分离的趋势不断发展,前端的工作越来越复杂。在实现一些复杂的业务逻辑时涉及到身份验证的问题,这时候就需要使用到 JWT 技术。JWT 即 Json Web Token,它是一种轻量级的身份认证和授权规范,能够实现用户在多个服务之间的身份验证。

在 Hapi 中,我们可以利用 JWT 来进行身份验证。接下来,本文将详细介绍如何在 Hapi 中使用 JWT 实现身份验证。

JWT 的基本概念

在介绍如何使用 JWT 进行身份验证前,我们先来了解 JWT 的基本概念。

JWT 是一个基于 JSON 的开放标准(RFC 7519),它包含了三个部分:头部(Header)、载荷(Payload)和签名(Signature)。其中,头部和载荷都是 JSON 格式的数据,而签名是对头部和载荷的一种加密算法得出的字符串。

具体来说,JWT 主要由以下三部分组成:

  • Header:头部包含了两部分信息,分别为加密类型和算法。加密类型通常是 JWT,算法常用的有 HS256、HS384、HS512、RS256、RS384、RS512、ES256、ES384、ES512、PS256、PS384 以及 PS512 等。

  • Payload:载荷是 JWT 实际的内容信息,一般包括三个子部分。分别为存储数据的标准声明(Registered claims)、用户自定义声明(Public claims)以及私有声明(Private claims)。其中存储数据的标准声明主要包括了一些基本的信息,如 JWT 的颁发者、过期时间等。

  • Signature:签名是对头部和载荷的一种加密算法得出的字符串。它用于验证 JWT 的合法性,确保 JWT 未被篡改。

在 Hapi 中使用 JWT 进行身份验证

接下来我们将详细介绍如何在 Hapi 中使用 JWT 进行身份验证。

安装 JWT 插件

首先,我们需要安装 Hapi-jwt 插件来实现 JWT 的身份验证。可以通过 NPM 来进行安装,命令如下:

创建 JWT Token

在实现身份验证前,我们需要先创建一个 JWT Token。可以在用户成功登录后使用 JWT 签名用户信息来创建这个 Token。

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

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

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

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

在这个例子中,我们首先引入了 JWT 模块,然后定义了一个秘钥 secretKey,该秘钥用于对 Token 进行签名。接着定义了一个函数 createToken,该函数用于创建 Token。在函数中,我们定义了一个对象 payload,该对象包含了用户的唯一标识 userId 和用户名 name。然后我们使用 jwt.sign() 方法对这个对象进行签名,并设置了过期时间为 1 天。最后返回了一个 Token。

实现身份验证

在创建 JWT Token 后,我们可以利用 Hapi-jwt 插件来实现身份验证。具体实现代码如下:

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

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

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

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

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

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

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

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

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

--------

在这个例子中,我们首先引入了 Hapi 和 Hapi-jwt 插件。然后定义了一个秘钥 secretKey,该秘钥用于对 Token 进行签名。

接着定义了一个函数 validateUser,该函数用于验证用户。在这个函数中,我们可以实现自己的用户验证逻辑,并返回一个包含 isValid 属性的对象。如果 isValid 为 true,则表示用户验证通过。

在设置 JWT 验证策略时,我们使用 server.auth.strategy() 方法。该方法用于设置一个验证策略,第一个参数为策略的名称,第二个参数为策略类型,第三个参数为配置对象。

在配置对象中,我们设置了使用的秘钥、验证函数 validateUser 以及验证的算法 HS256。在设置默认验证策略时,我们使用 server.auth.default() 方法来设置默认策略。这里我们将默认验证策略设置为 JWT。

最后,我们添加了一个简单的路由,用于测试服务器是否正常启动。

发送请求并进行身份验证

在实现身份验证后,我们可以发送请求来验证身份。在发送请求时,我们需要在请求头部添加一个 Authorization 字段,该字段值为 Token。例如:

在这个请求头部中,我们使用 Bearer 来指示使用 JWT 进行身份验证,接着添加了一个空格和 Token,该 Token 是我们在创建 Token 时获得的。

接下来,当请求发送到服务器时,Hapi-jwt 插件会自动从请求头部中解析出 Token,并调用 validateUser 函数来验证用户身份。

总结

本文详细介绍了在 Hapi 中使用 JWT 进行身份验证的方法。在实现身份验证前,我们首先介绍了 JWT 的基本概念和构成,接着讲解了如何在 Hapi 中使用 JWT 进行身份验证。通过这篇文章的学习,你可以更好地理解 JWT 技术的原理,并灵活运用到实际项目中。

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

纠错
反馈