在前端开发中,用户身份认证和授权是非常重要的。JSON Web Token (JWT) 是一种跨语言、跨平台、轻量级的身份认证和授权解决方案。Hapi 框架是一个可扩展的 Node.js 后端框架,提供了许多内置的插件来协助开发者实现许多功能,其中也包括实现 JWT Token 鉴权的 Hapi-auth-jwt2 插件。
JWT Token 简介
JWT 由三部分组成:Header、Payload 和 Signature。
Header 包含了 Token 的类型和所使用的算法,例如:
- ------ -------- ------ ----- -
Payload 包含了 Token 所携带的信息,例如:
- --------- ------ ----------- ----- ----- -------- --------- ------- -
Signature 则是使用密钥对 Header 和 Payload 进行签名生成的,例如:
----------- ----------------------- - --- - ------------------------- -------
JWT 通常以字符串的形式传递,可以存储在客户端的 cookie 或 localStorage 中,也可以通过 HTTP 请求的 Authorization Header 携带。
Hapi-auth-jwt2 插件介绍
Hapi-auth-jwt2 插件可以帮助我们在 Hapi 应用中实现 JWT Token 的认证和授权功能。该插件提供了 jwt-auth-strategy
来定义一个新的认证策略,并支持自定义的 JWT Token 解析函数和验证函数。
安装和使用
首先我们需要安装 hapi-auth-jwt2
和 jsonwebtoken
两个依赖:
--- ------- ------ -------------- ------------
然后在 Hapi 应用中注册该插件:
----- ---- - ---------------- ----- ------------ - -------------------------- ----- ------ - --- -------------- ------------------- ----- ---- --- ----------------------------- --- -- - -- ----- ----- ---- -- -- --- ----- ---- --------------------------- ------ - ---- --------- -- -- ------------- --------- -- ---- -------------- - ----------- --------- - -- ---- --- ---
其中,validateFunc
函数定义了如何验证 JWT Token 的有效性和权限,接受两个参数:decoded (解码后的 Payload) 和 request (请求对象)。
例如,在下面的示例中,我们将验证 JWT Token 的有效性和权限:
-------- ----------------- -------- - -- --------------- --- ----- -- -------------------------------- - ------ - -------- ----- ------------ ------- -- - ------ - -------- ----- -- -
在路由中使用 jwt
认证策略:
-------------- ------- ------ ----- ----------- ------- - ----- ------ -- -- --- ---- -------- --------- ------ -- - -------------------------------- -- -- ----- - ------- - - ---
生成 Token
在用户登录成功后,我们需要生成 JWT Token 并将其发送给客户端,客户端可以使用 Token 进行后续的请求。
----- --- - ------------------------ -- -- ----- ----- ----- - ---------- ------- ------ --------- ----- ----- ------ --------- ------- -- --------- - ---------- ---- --- -- - ----- ------ ------- ----- ---
其中,sign
函数用于生成 Token,接受三个参数:Payload、密钥和选项。expiresIn
指定了 Token 的有效期,可以接受多种格式 (详情请参阅官方文档:https://github.com/auth0/node-jsonwebtoken#usage)。
鉴权示例
下面是一个完整的 Hapi 应用的示例代码,其中包含了如何使用 Hapi-auth-jwt2 插件来实现 JWT Token 鉴权的方法。
----- ---- - ---------------- ----- ------------ - -------------------------- ----- --- - ------------------------ ----- ------ - --- -------------- ------------------- ----- ---- --- ----------------------------- --- -- - -- ----- ----- ---- -- -- --- ----- ---- --------------------------- ------ - ---- --------- -- -- ------------- --------- -- ---- -------------- - ----------- --------- - -- ---- --- --- -- ------ -------- ----------------- -------- - -- --------------- --- ----- -- -------------------------------- - ------ - -------- ----- ------------ ------- -- - ------ - -------- ----- -- - -- ---- -------------- ------- ------- ----- --------- ------- - ----- ------ -- ----- -------- --------- ------ -- - -- ------ ----- - --------- -------- - - ---------------- -- --------- --- ------- -- -------- --- --------- - -- -- ----- ----- ----- - ---------- ------- ------ --------- ----- ----- ------ --------- ------- -- --------- - ---------- ---- --- -- - ----- ------ ------- ----- --- - ---- - ------- ------ -------- -------- -- ---------- ------------- - - - --- -------------- ------- ------ ----- ----------- ------- - ----- ------ -- -- --- ---- -------- --------- ------ -- - -------------------------------- -- -- ----- - ------- - - --- -- ----- ---------------- -- - -- ----- ----- ---- ------------------- ------- --- --------------------- ---
总结
本文介绍了如何在 Hapi 应用中使用 Hapi-auth-jwt2 插件来实现 JWT Token 鉴权,并提供了详细的示例代码。JWT 提供了一种轻量级、可扩展的身份认证和授权解决方案,具有跨语言、跨平台的特点,在现代化的 Web 应用中得到了广泛的应用。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/66568504d3423812e4b4f250