JSON Web Token(JWT)是一种用于 Web 应用程序的轻量级身份验证机制。它非常适合用于 API 身份验证,因为 JWT 是基于 token 的,可以传输在 HTTP 头部或 URL 查询参数中,非常方便。
Hapi 是一个 Node.js web 框架,它提供了很多有用的特性和插件,非常适合用于构建 RESTful API。本文将介绍如何在 Hapi 中使用 JWT 认证插件。
安装
首先,我们需要安装官方提供的 hapi-auth-jwt2 插件。
npm install hapi-auth-jwt2
注册插件
在创建 Hapi 服务器实例之前,我们需要将这个插件注册到服务器中去。
-- -------------------- ---- ------- ----- ---- - ---------------------- ----- ------------ - -------------------------- ----- ------ - --- ------------- ----- ----- --- ----- -------- ------ - ----- ------------------------------ -- --------- --- ----- -------------- - -------
配置插件
我们需要在服务器启动前配置插件。
-- -------------------- ---- ------- ----- -------- ------ - ----- ------------------------------ --------------------------- ------ - ---- --------------------- -- ---- --------- --------- -------- -- - -- -------- -- ----------------- - -- --- ----- ---- --------------- ------ - -------- ---- -- - ---- - ------ - -------- ----- -- - -- -------------- - ----------- ---------- -- ---- - --- --------------------------- -- --------- --- ----- -------------- - -------
上面的代码中,我们定义了一个名为 "jwt" 的认证策略,使用的是 jwt 签署算法,签名秘钥为 "my_very_secret_key"。在 validate
函数中,我们可以根据 JWT 载荷中的信息进行自定义验证。如果验证成功,返回 { isValid: true }
,否则返回 { isValid: false }
。最后,我们将默认策略设置为 jwt
。
保护路由
我们可以在需要验证的路由上使用认证策略 "jwt":
-- -------------------- ---- ------- -------------- ------- ------ ----- ------------- -------- - ----- ------ -------- --------- -- -- - ------ ---- --- ---------------- - - ---
上面的代码中,我们定义了一个 GET 请求的路由,路径为 "/protected"。在路由配置中,我们设置了 auth
选项为 "jwt",也就是应用上面定义的认证策略。这样,只有携带了有效的 JWT 令牌的请求才会执行该路由。
生成 JWT 令牌
使用 JWT 认证插件后,我们需要在客户端生成有效的 JWT 令牌并携带到服务端。以下是一个生成 JWT 令牌的示例代码:
-- -------------------- ---- ------- ----- --- - ------------------------ -- ---- --- -- ----- ----- - ---------- --------- -------- -- --------------------- - ---------- ----- -- ------ ---------- -------- -- ---- --- -- -- ---- --------- --------------- -- ------------------- - -------- - ---------------- ------- - - ------ - ---
总结
使用 hapi-auth-jwt2 插件可以很方便地实现 JWT 认证,只需要在服务器启动前注册插件并配置策略,就可以保护指定的路由了。同时,也需要在客户端生成有效的 JWT 令牌并携带到服务端。
由于 JWT 令牌是基于 token 的认证机制,需要注意的是,客户端需要保密、安全存储令牌,并仅将令牌用于请求受信任的服务器。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c713ed10032fedd3906246