Hapi 应用中的 JWT 权限管理
随着前端应用的复杂度越来越高,对于权限管理的要求也越来越严格。而 JSON Web Token (JWT) 作为一种通用的声明式身份验证和授权标准,已经成为前后端分离应用中的常用工具。
本文将介绍如何在 Hapi 应用中使用 JWT 实现权限管理,并提供示例代码。
什么是 JWT
JWT 是一种开放标准(RFC 7519),用于在网络应用之间传递声明。JWT 由三个部分组成:
- Header(头部):描述 JWT 的元数据,通常包括算法类型和 token 类型。
- Payload(有效负载):包含要发送的数据,包括用户 ID、用户名、角色等。
- Signature(签名):用于验证 token 是否被篡改过。
JWT 的主要优点是可以在前端以 token 的形式存储用户身份信息,而不需要在每个请求中都传递身份验证信息。这大大简化了应用的开发和维护,同时提高了安全性。
在 Hapi 中使用 JWT
Hapi 是一个 Node.js 的 Web 框架,提供了一系列强大而易用的工具,包括路由管理、中间件、插件等。在 Hapi 应用中使用 JWT 实现权限管理,需要以下几个步骤:
1. 安装必要的库
npm install hapi-jsonwebtoken hapi-auth-jwt2
分别是 hapi-jsonwebtoken 和 hapi-auth-jwt2 库,用于 JWT 的生成和验证。
2. 注册插件
在 Hapi 应用中注册 hapi-auth-jwt2 插件,用于 JWT 的验证。
-- -------------------- ---- ------- ----- ---- - ---------------------- ----- ------- - -------------------------- ----- ------ - --- ------------- ----- ----- ----- ----------- --- ------ -- -- - ----- ------------------------- --------------------------- ------ - ---- ----------------- --------- ----- --------- -------- -- -- -- -------- ---- --- -------------- - ----------- --------- - --- -- ------ ---------- -------------- ------- ------ ----- --------- -------- - ----- ----- -- -------- --------- -- -- - ------ ------ ------ ---- -------------------------------- ---------------- - --- ----- --------------- -----展开代码
在上面的代码中,我们定义了一个验证策略 'jwt',使用 HS256 算法进行签名和验证,同时传入了一个验证函数 validate。这个函数会在每次请求到达需要 JWT 验证的路由时执行,用于验证 token 是否正确。这里我们简单地返回了 { isValid: true },表示验证通过。
在路由定义中,通过设置 options.auth: 'jwt' 来开启 JWT 验证。
3. 生成 Token
在登录成功后,服务器端需要生成一个 JWT,并将其返回给客户端保存在浏览器的 localStorage 中。
const jwt = require('hapi-jsonwebtoken'); const token = jwt.sign({ name: 'user', isAdmin: false }, 'jwt_secret_key', { algorithm: 'HS256' });
在上面的代码中,我们使用 hapi-jsonwebtoken 库生成了一个 token,包含了用户的 name 和 isAdmin 信息,使用 HS256 算法签名,并传递了一个密钥 'jwt_secret_key'。
4. 发送 Token
在客户端每次请求的时候,在请求头中添加一个 Authorization 字段,值为 'Bearer token',其中 token 是服务器端返回的 JWT。
const headers = { Authorization: `Bearer ${token}` }; fetch('/hello', { headers }) .then(res => res.text()) .then(console.log);
在上面的代码中,我们使用 fetch 发起了一个请求,通过请求头中的 Authorization 字段传递了 JWT。
总结
本文介绍了如何在 Hapi 应用中使用 JWT 实现权限管理,包括 JWT 的生成、验证和传递。使用 JWT 可以大大简化前端应用的开发和维护,同时提高了安全性。
示例代码:https://github.com/lisztli/hapi-jwt-auth-example
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/664b288fd3423812e4a15ebd