Hapi 实战:如何使用 JWT 进行请求身份验证

阅读时长 5 分钟读完

在开发 Web 应用过程中,用户认证和资源访问控制是不可避免的问题,而 JWT(JSON Web Token) 是一种常用的认证方案。本文将介绍如何在 Hapi 框架中使用 JWT 进行请求身份验证。

JWT 简介

JWT(JSON Web Token) 是一种开放标准,用于通过网络传递信息,主要用于身份认证和授权。JWT 由三部分组成,分别是 Header,Payload 和 Signature。

Header 部分通常由两部分组成,分别是 token 类型和算法类型,比如:

Payload 部分是实际的用户数据,比如用户 id,用户名等等,也可以自定义一些其它数据,比如用户权限等等,比如:

Signature 部分则是对 Header 和 Payload 进行签名后的结果,用于验证数据的完整性和真实性,比如:

Hapi 实现 JWT 身份验证

在 Hapi 中使用 JWT 身份验证主要分为两步,第一步是生成 JWT token,第二步是验证 JWT token 的有效性。

生成 JWT token

在 Hapi 中生成 JWT token 可以使用 jsonwebtoken 这个 npm 包。我们可以在路由处理函数中生成 token,然后将 token 通过响应返回给客户端:

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

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

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

以上代码使用了 jsonwebtoken 包中的 sign 方法生成 JWT token,包含用户 id 信息,并且设置了一个过期时间为 1 小时。生成的 token 可以通过响应返回给客户端,客户端在后续的请求中携带 token 访问服务端资源。

验证 JWT token

验证 JWT token 的有效性可以使用 Hapi 中的 Authentication 插件并结合 jsonwebtoken 包。

首先,我们需要安装并注册 hapi-auth-jwt2 插件:

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

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

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

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

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

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

以上代码使用了 hapi-auth-jwt2 插件,并且使用 server.auth.strategy 方法注册一个名为 jwt 的策略。该策略包含了一个验证回调函数,用于验证 token 中解码出来的用户 id 是否存在,如果存在则认为验证成功。如果验证失败,可以通过返回一个包含 isValid 为 false 的对象来表示。

我们还通过 server.auth.default 方法将默认的认证策略设置为 jwt 策略,这样所有的请求都会经过 jwt 验证。

最后,我们可以在路由配置中指定需要认证的路由,可以使用 config.auth 属性来指定需要使用的认证策略,比如:

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

以上代码指定了根路径的 GET 请求需要进行 jwt 认证,当请求到达服务器端时,Hapi 就会通过指定的验证策略对请求进行验证,如果验证失败则返回一个 401 错误,否则继续进行后续的路由处理。

总结

本文介绍了如何在 Hapi 框架中使用 JWT 进行请求身份验证。我们首先了解了 JWT 的基本概念和组成结构,然后通过示例代码演示了如何生成和验证 JWT token,最后给出了如何在路由配置中指定需要使用的认证策略。这些内容对于 Web 应用中的用户认证和资源访问控制都是非常有帮助和指导意义的。

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

纠错
反馈