npm 包 hapi-auth-jwt2-payload 使用教程

阅读时长 6 分钟读完

前言

在前端开发中,我们经常需要使用认证和授权功能来保护用户信息和资源的安全。而 JWT(JSON Web Token)则是一种受欢迎的实现方式。在 Node.js 中,我们可以使用 hapi-auth-jwt2-payload 这个 npm 包来简化 JWT 认证和授权功能的开发。

本文将详细介绍 hapi-auth-jwt2-payload 的使用方法,涵盖安装、配置、认证和授权等方面的内容,并给出相应的示例代码,希望对读者有所启发。

安装

在开始使用 hapi-auth-jwt2-payload 之前,我们需要先进行安装。在终端中,使用以下命令来安装 hapi-auth-jwt2-payload:

配置

在项目中,我们需要在服务器端进行配置。

首先,我们需要在项目中引入 hapi-auth-jwt2-payload 与 jsonwebtoken、jsrsasign 这两个 package:

之后,我们需要定义 JWT 的选项。JWT 有多个配置选项,具体参考官方文档。在这里,我们仅列出一些常用的选项:

在这里,我们使用 RS256 算法对 JWT 进行签名,JWT 的有效期为 1 小时,在签发 JWT 的时候,设置发行方为 https://www.example.com ,并使用 https://www.example.com 作为 JWT 的接收方。当然,这些选项也可以根据实际需要进行修改。

接下来,我们需要在服务器中注册 hapi-auth-jwt2-payload 插件,并定义验证策略:

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

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

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

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

在这里,我们使用 RSA 算法对 JWT 进行签名,定义了公钥和私钥,验证时需要使用的选项 verifyOptions,同时也定义了自定义的认证函数 validate。在这里,我们简单的示例代码中,直接返回 { isValid: true } 表示认证通过。这里的认证函数需要根据实际的需求进行修改。

认证与授权

在上面的配置过程完成后,我们就可以进行认证与授权了。

在需要进行认证的路由中,我们可以使用 authenticate 的父函数 protect 引入保护 jwt。

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

在这里,我们使用 auth 选项,设定认证策略为 jwt 策略,并设置策略生效的模式为 required。当protect装饰的路由被调用时没有通过策略筛选,将会直接返回相应的 401 错误状态。

当需要获取附加信息(也就是在 JWT 中除了 token 之外的信息)时,我们可以在路由的处理函数中获取:

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

除了获取附加信息,我们还可以进行授权操作。在需要授权的路由中,我们可以将实现授权验证的 validate() 函数返回值的成员 credentials 赋予处理函数:

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

在这里,我们使用 access 选项,设定授权规则为 scope = ['user']。如果用户的 JWT token 中包含了 user 的 scope,那么 validate() 函数需要返回以下的有效载荷:

这里的 scope 与 username 是根据实际的授权规则定义的,可以根据实际需求进行修改。

总结

hapi-auth-jwt2-payload 是一个方便 Node.js 开发的 npm 包,可以帮助我们简单、快速地实现 JWT 认证和授权功能。本文详细介绍了 hapi-auth-jwt2-payload 的安装、配置、认证和授权等方面内容,并给出了相应的示例代码。相信读者在阅读本文后,能够十分轻松地上手使用 hapi-auth-jwt2-payload,并在实际开发中发挥出其强大的功能。

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

纠错
反馈