当你在创建一个使用 Hapi 框架的 Web 应用程序时,使用 JWT 来验证用户身份可能是一个非常好的选择。在本文中,我们将会详细讲解 JWT 的相关知识,并提供一个示例代码作为参考。
什么是 JWT?
JWT 的全称是 JSON Web Token(JSON 网络令牌),它是一种开放标准(RFC 7519),可以用于在两个应用程序之间传递信息。它们最常用于身份验证和授权场景。例如,当你登录某个网站时,它会生成一个 JWT,然后在一段时间内将该 JWT 作为身份验证所需的信息进行传递。
JWT 的结构
JWT 由三部分组成:Header(头部)、Payload(载荷)和 Signature(签名)。这三部分都是以 . 进行分隔的字符串。
Header 声明了该 JWT 使用的算法。例如:
{ "alg": "HS256", "typ": "JWT" }
Payload 包含了 JWT 所包含的数据。例如:
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
Signature 用于验证 JWT 是否被篡改。例如:
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret )
在创建 JWT 时,需要使用这三部分将其组合在一起。最终生成的 JWT 如下:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
在 Hapi 应用程序中使用 JWT 认证
在本文的示例中,我们将使用 Hapi-jwt 和 Hapi-auth-jwt2 插件实现 JWT 认证。
步骤一:在应用程序中安装插件
-- -------------------- ---- ------- ----- ---- - --------------------- ----- ------- - ------------------- ----- ------------ - ------------------------- ----- ------ - ------------- ----- ---- -- ----- -------- ------- - --- - -- -- -------- -- ----- ------------------------ -- -- -------------- -- ----- ----------------------------- --------------------------- ------ - ---- ------------------ --------- --------- -------- -- -- - -- ------------- - -- -------------- ------- ------ ----- --------- -------- --------- -- -- - ------ ------ ------- -- -------- - ----- ----- - -- ----- -------------- ------------------- ------- -- ----- -- ---------------- - ----- ----- - ---------------- - - -------
步骤二:使用 JWT 进行身份验证
在上面的示例中,我们已经设置了 Hapi-jwt 和 Hapi-auth-jwt2 插件,现在我们需要将它们与路由结合起来。在示例中,我们将使用 /hello 路由来演示如何使用 JWT 进行身份验证。
-- -------------------- ---- ------- -------------- ------- ------ ----- --------- -------- --------- -- -- - ------ ------ ------- -- -------- - ----- ----- - --
这个路由被保护起来了,并且需要一个有效的 JWT 来进行身份验证。
步骤三:生成一个 JWT
Hapi-jwt 插件可以通过在请求中包含 JWT 来验证身份。因此,在生成 JWT 时,你需要将其包含在请求头部中。
-- -------------------- ---- ------- -------------- ------- ------ ----- --------- -------- --------- -- -- - ----- ----- - ------------------------ ---- ------------- ----- ----- ----- ---- --------------------- - ----- -- ------------------ ------ ------------ -------- ------ ------------ ------ ----- -------------------------- ------ - --
在上面的示例中,我们生成了一个包含 sub、name 和 iat 信息的 JWT。请注意,我们在生成 JWT 时使用了你自己独有的密钥。该 JWT 将包含在响应头部中,使得后来的请求可以将其包含在请求头部中,并使用它来进行身份验证。
步骤四:验证 JWT
现在,我们已经生成了一个包含 JWT 的响应头部。
在后续的请求中,将包含这个 JWT 以进行身份验证。为此,Hapi-jwt 插件需要设置身份验证策略,并在路由选项中将其应用于指定路由。
-- -------------------- ---- ------- --------------------------- ------ - ---- ------------------ --------- --------- -------- -- -- - -- ------------- - -- -------------- ------- ------ ----- --------- -------- --------- -- -- - ------ ------ ------- -- -------- - ----- ----- - --
在上面的示例中,我们将 "jwt" 身份验证策略设置为了默认的验证策略,并将其应用于 /hello 路由。validate 回调函数用于在用户的 JWT 经过解析后进行身份验证。例如,你可以检查 JWT 中包含的用户名和密码是否与数据库中存储的信息匹配。如果用户被认证,则允许他们执行特定的操作。
-- -------------------- ---- ------- --------- --------- -------- -- -- - -- ------------- ----- ---- - ------------------------------------- -- ------- - ------ - -------- ----- - - -- -- --- ------------------- -- -------------- --- ----------------- - ------ - -------- ----- - - ------ - -------- ---- - -
示例代码
最后,我们提供完整的示例代码,供您参考。其中包含了使用 JWT 认证 Hapi 应用程序的所有上述步骤。
-- -------------------- ---- ------- ----- ---- - --------------------- ----- ------- - ------------------- ----- ------------ - ------------------------- ----- ------ - ------------- ----- ---- -- ----- -------- ------- - --- - -- -- -------- -- ----- ------------------------ -- -- -------------- -- ----- ----------------------------- --------------------------- ------ - ---- ------------------ --------- --------- -------- -- -- - -- ------------- -- ------------ -- ------- -- ------------ - --- - ------ - -------- ----- - - ------ - -------- ---- - - -- -------------- ------- ------ ----- --------- -------- --------- -- -- - ------ ------ ------- -- -------- - ----- ----- - -- -------------- ------- ------ ----- --------- -------- --------- -- -- - ----- ----- - ------------------------ ---- ------------- ----- ----- ----- ---- --- ---- --------------------- - ----- -- ------------------ ------ ------------ -------- ------ ------------ ------ ----- -------------------------- ------ - -- ----- -------------- ------------------- ------- -- ----- -- ---------------- - ----- ----- - ---------------- - - -------
结论
本文中,我们已经详细介绍了如何在 Hapi 应用程序中使用 JWT 认证。虽然我们提供了一个示例代码,但是当你在实际项目中使用时,你可能需要对其进行更多的修改和扩展。如果你有任何问题或建议,请随时向我们留言。谢谢!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f53735c5c563ced570ecdd