身份权限控制在 Web 开发中是一个非常重要的话题,特别是对于需要对特定功能进行权限管控和用户角色授予的系统和应用程序。在本文中,我们将介绍如何使用 Express.js 创建基于角色的访问控制以确保您的应用程序具有必要的安全措施。
基本概念
什么是角色访问控制(RBAC)?
角色访问控制 (Role-Based Access Control,RBAC) 是一种将权限授予到特定用户角色的系统安全方法。RBAC 基于用户所属的角色来控制用户权限,而不是将权限授予到单个用户本身。这种方法简化了系统管理,减少了犯错的可能性,还可以轻松地更改用户权限而不必更改个人帐户。
什么是 Express.js?
Express.js 是一个流行的 Web 框架,它建立在 Node.js 上,它的目标是快速进行 Web 应用程序和 API 的开发。Express.js 也是一个开源和灵活的框架,它提供了许多功能,例如路由、模板引擎和中间件等。
创建基于角色的访问控制
1. 安装必要的软件包
首先,我们需要安装必要的软件包。我们将使用 Express.js、bcrypt 和 jsonwebtoken。
打开终端,转到项目文件夹并使用以下命令安装这些软件包:
--- ------- ------- ------ ------------
2. 设置基本的路由和控制器
让我们设置一些基本的路由和控制器。
在您的项目文件夹中创建一个 app.js 文件并添加以下代码:
----- ------- - ------------------- ----- --- - ---------- -- -- ------------ ----- ---- -- - -------------- ---------- --------------- --- -- --- ---------------- -- -- - ------------------- ---- -------- ---
3. 添加身份验证路由
我们将创建一个身份验证路由,该路由将接受用户的用户名和密码并返回一个 JWT。
创建 auth.js 文件并添加以下代码:
----- ------- - ------------------- ----- ------ - ----------------- ----- ------ - ------------------ ----- --- - ------------------------ -- ---- ----- ----- - - - --------- -------- --------- -------------------------------------------------------------- -- - --------- ------- --------- -------------------------------------------------------------- - -- ---------------- ----- ---- -- - ----- - --------- -------- - - --------- ----- ---- - ------------ -- ---------- --- ---------- -- ------- - ------ ---------------------- -------- ----------- --- - ------------------------ -------------- ----- ------- -- - -- ----- - ------ ---------------------- -------- ------- --- - -- --------- - ------ ---------------------- -------- ----------- --- - ----- ----- - ---------- -------- -- ----------------- ---------- ----- --- --- --- -------------- - -------
我们在 auth.js 文件中模拟了两个用户账户,但在实际应用中,用户信息通常保存在数据库或其他存储中。此路由将从请求体中读取用户名和密码,并将其与模拟的用户信息进行比较。如果身份验证成功,则使用该用户名创建 JWT 并将其发送回客户端。
4. 添加受保护的路由
现在我们将创建一个受保护的路由,该路由将检查客户端请求中是否包含 JWT,然后使用该令牌验证用户是否有权访问该路由。如果 JWT 不存在或无效,则返回 401。
创建受保护的路由并添加以下代码:
----- ------- - ------------------- ----- ------ - ----------------- ----- --- - ------------------------ -- ---- ----- ----------- - - ------ -------- -------- ---------- ----- -------- -- --------------- ----- ---- -- - ----- ----- - -------------------------- -- -------- - ------ ---------------------- -------- ------------ --- - ----------------- ---------------- ----- ----- -- - -- ----- - ------ ---------------------- -------- ----------- --- - ----- - -------- - - ----- -- ------------------------ - ------ ---------------------- -------- ----------- --- - ---------- -------- ----------- --- --- --- -------------- - -------
5. 注册路由
现在,我们要将路由注册到应用程序中。
打开 app.js 文件并添加以下代码:
----- ------- - ------------------- ----- --- - ---------- -- ---- ----- ---------- - ------------------ ----- ------------ - -------------------- -- ---- ------------------------ -- -- ---- -- ---------------- ------------ -- ------ ------------------ -------------- -- ------ -- --- ---------------- -- -- - ------------------- ---- -------- ---
我们创建了指向 auth.js 和 secure.js 文件的路由,并让 Express.js 应用程序使用这些路由。我们还添加了用于解析 POST 数据的中间件。
6. 运行应用程序
现在,我们的应用程序已经准备就绪。使用以下命令启动它:
---- ------
打开浏览器并转到 http://localhost:3000/。您将看到一条欢迎消息。
现在,我们需要验证身份并获得令牌。使用以下命令进行身份验证:
---- -------- -------------- ----------------- --------- ---- ------ -------------------------------------------- ---------------------------
您将看到以下响应:
- -------- ------------------------------------------------------------------------------------------------------------------------------------- -
这是您的 JWT。现在,我们将使用它来访问安全路由。使用以下命令进行此操作:
---- -------- --------------- ------ ------------------------------------------------------------------------------------------------------------------------------------ -----------------------------
您将看到以下响应:
- ---------- ----------- -
结论
在本文中,我们介绍了如何使用 Express.js 创建基于角色的访问控制。我们使用了模拟用户和权限来演示如何实现此功能。实际上,在生产环境中,您需要使用数据库或其他存储来存储用户和权限信息。此外,我们还介绍了身份验证和 JWT 的基本概念。希望这篇文章对您有所帮助,可以帮助您更好地了解如何实现在 Web 应用程序中重要的身份验证和权限管控。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/672889212e7021665e20955f