如何在 Hapi 框架中使用原生 JS 实现 JWT 身份验证?

阅读时长 5 分钟读完

JWT 简介

JWT(JSON Web Token)是一种用于双方之间传递安全信息的简洁、URL 安全的方式。JWT 是基于 JSON 编码的令牌,由三部分组成:头部载荷签名

头部

头部通常由两部分组成:令牌的类型(这里是 JWT)和使用的算法(比如 HMAC SHA256 或 RSA)。

载荷

载荷是令牌的主要内容,其中包含了需要传递的数据。载荷可以包含任何方法定义的信息,但建议只使用一些标准的声明,比如 iss(签发者)、exp(到期时间)、 sub(主题)和 aud(受众)。

签名

签名是对前两部分的签名,以确保内容没有被篡改。签名的密钥只有服务器才知道,所以在验证签名时,只需要使用相同的密钥即可。

实现 JWT 身份验证

在 Hapi 框架中,我们可以使用 hapi-auth-jwt2 插件来实现 JWT 身份验证。该插件将 token 验证逻辑封装在方便的方法中。

安装依赖包

在使用 hapi-auth-jwt2 插件之前,我们需要安装 jwt 和 hapi-auth-jwt2 两个依赖包:

注册插件

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

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

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

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

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

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

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

-------

在上面的代码中,我们首先使用 server.register 方法来注册 hapi-auth-jwt2 插件,然后使用 server.auth.strategy 方法来定义身份验证策略,并将其命名为 jwt。在验证策略中,我们需要设置密钥和算法,并实现 validate 方法来验证 token 的有效性。

最后,我们使用 server.route 方法来定义路由配置,在 options 选项中设置验证策略为 jwt,来开启 token 验证功能。

生成 token

在生成 token 时,我们使用 jwt.sign 方法,将要传递的 payload 和密钥作为参数传入,并设置 expiresIn 选项来设置 token 的有效期。

验证 token

在上面的示例中,我们使用了 hapi-auth-jwt2 插件自带的验证方法,如果你想手动验证 token,你可以通过以下方式来实现:

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

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

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

在验证 token 时,我们调用 jwt.verify 方法,并将 token 和密钥作为参数传入。如果验证通过,将返回一个包含 decoded 属性的对象,该属性包含了 token 的 payload 部分。

总结

在本文中,我们介绍了 JWT 的基本概念,并使用 hapi-auth-jwt2 插件来实现了 JWT 身份验证功能。同时,我们还学习了如何手动地生成和验证 token。这些知识可以帮助你更好地保护你的网站和 API,提高安全性,并保护用户的隐私。

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

纠错
反馈