在现代 web 开发中,用户验证是必不可少的。其中一种常见的验证方式是 JWT(Json Web Token),也被称为无状态验证,因为服务器不需要在本地存储用户信息。Hapi.js 是一个流行的 Node.js Web 框架,提供了强大的插件系统,其中包括可以方便地集成 JWT Token 验证的插件。在本文中,我们将讨论如何在 Hapi.js 中使用 JWT Token 验证机制。
什么是JWT
JWT 是一种使用 JSON( JavaScript 对象表示) Web 令牌(Json Web Token)的开放标准((RFC 7519)用于作为在各方之间作为声明的传输形式。
JWT 由三个部分构成:头部、载荷和签名。头部包含令牌的类型和加密算法类型。载荷包含着实际的数据,比如用户标识、过期时间等。签名是由头部、载荷和密钥生成的加密字符串,用于验证 JWT 的正确性。
在 JWT 中,服务器将使用载荷生成一个 token 并将其发送回客户端。之后,客户端在后续请求中发送这个 token 来进行认证。服务器将使用密钥来验证 token 的签名,并确认载荷中与用户相关的信息是否有效。如果全部验证通过,服务器就可以授权客户端的请求。
Hapi.js 中 JWT Token 验证插件
在 Hapi.js 中实现 JWT Token 验证需要使用对应的插件 hapi-auth-jwt2。 安装这个插件:
npm install hapi-auth-jwt2 --save
在 Hapi.js 中使用 JWT 验证
Hapi.js 中实现 JWT 验证可以分为两个主要步骤:
- 注册验证插件
- 保护路由
在 Hapi.js 中,首先,我们需要定义 JWT 策略。hapi-auth-jwt2 插件不直接暴露策略来使用,所以我们需要自己定义策略。可以在插件注册的时候定义策略,或者在需要使用过程或者 controller 中单独定义也是可以的。
下面的代码给出了如何在 Hapi.js 中注册JWT策略:
-- -------------------- ---- ------- ----- ---- - --------------------- ----- ------- - ------------------------- ----- ------------ - ----- -- -- - ----- ------ - ------------- ----- ---- -- ------------------------ --------------------------- ------ - ---- ------------------- --------- --------- -------------- - ----------- --------- - --- ----------- --- ----- ------ - ----- -------- - ----- -------- --------- - -- -- ---- ---------- ---- --
上述代码中定义了一个名为“jwt”的策略。其中 key
是一个密钥,将在签名和验证 JWT 时使用。在这里指定一个验证函数 validate
,它将在 JWT 解码后运行。verifyOptions
包含用于验证 JWT 的选项,如加密算法。为了更好地了解所有选项,请参阅 hapi-auth-jwt2 插件文档。
接下来,我们需要在路由中使用策略来保护我们想要验证的端点。下面的代码演示了如何启用 JWT 策略来保护一个路由:
-- -------------------- ---- ------- - ------- ------ ----- ------------- -------- - ----- ----- -- -------- -------- --------- -- - ------ ---- --- ----- -- -------- - -
这是一个基本的示例,它定义了一个名为/protected
的路径,如果 token 有效则返回“Token is valid”。注意这里 options
中的 auth: 'jwt'
,这是用来启用 JWT 策略的选项。如果请求者没有有效的 JWT,它将被拒绝。
最后,我们还需要在请求头中添加 JWT Token,以便服务器可以解析它并完成验证。如果使用浏览器进行互动,通常通过 javascript 代码将JWT Token添加到请求头中请求后端API。
fetch('/protected', { method: 'GET', headers: { 'Authorization': 'Bearer ' + token } })
结论
使用 JWT Token 验证机制可以使 web 应用程序更加安全,并且这种验证方式不需要服务器端存储用户信息,减少了服务器负担。在 Hapi.js 中使用 hapi-auth-jwt2 插件可以快速简单地添加 JWT Token 验证机制。我们只需要定义策略,对需要保护的路由使用 JWT 策略,就可以快速构建出一个安全的 web 应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67188315ad1e889fe22c098e