gpt4 book ai didi

node.js - 在 RESTful API 中检查用户权限的最佳实践

转载 作者:太空宇宙 更新时间:2023-11-04 01:25:38 25 4
gpt4 key购买 nike

我正在为我的公司开发内部管理系统。部分API路由会检查用户的角色,其余路由会检查用户的权限。

目前,我正在做的是将用户的权限存储在 JWT token 中

{
"user": {
"name": "Oyster Lee",
"role": "root",
"image": ""
},
"OMS": 2147483647,
"WMS": 4095,
"iat": 1566536007,
"exp": 1567140807,
"iss": "Test"
}

我的许可是使用按位运算符。但每个系统最多只能使用31种权限。我有超过 31 个,因此需要替换按位运算符。

此外,在我为用户分配新的权限或角色后,他必须一次又一次地注销并登录。

我在想,每次用户向路由发送请求时,我是否应该检查数据库以获取用户的许可。会导致应用程序更重吗?有什么优点和缺点吗?对了,我是MySQL作为我们的数据库。

前端还需要根据用户的权限或角色有条件地渲染。我使用 Nuxt.js SPA 作为前端。

最佳答案

您正在构建的系统存在多个问题:

  • 首先会导致角色爆炸/权限爆炸。现在您已经想到了几个角色和权限。但 future 可能还会有更多。您是否需要重新设计您的权限?
  • 其次,您无法优雅地处理关系(如果访问是基于用户和对象位于同一部门/地区的事实怎么办?)
  • 第三,您使用硬编码自己的逻辑,我的许可是使用按位运算符。但每个系统最多只能使用31种权限。我的数量超过 31,因此需要替换按位运算符。 这无法扩展
  • 最后,您必须登录/注销才能使更改生效。

您需要将授权逻辑与内部管理系统 API 分离并外部化。内部管理系统 API。有一种称为基于属性的访问控制 (ABAC) 的模式可以实现这一目标。借助 ABAC,您可以拥有一个基于拦截的模型,其中策略执行点 (PEP) 拦截对 API 的调用,并根据策略决策点 (PDP) 检查是否应允许调用者 (Alice) 访问他们所请求的任何内容(文档、记录...)。

Attribute Based Access Control

PDP 配置有策略,这些策略使用属性来描述可能发生或不能发生的情况。例如:

  • 如果 user.department == record.department,角色 ==“manager”的用户可以对类型 ==“record”的对象执行操作 ==“view”。

编写此类策略有两个标准: 。 ABAC 架构有多种实现方式,包括开源(AuthZForce、AT&T...)和商业(Axiomatics)。一定要检查一下。我还在其他帖子中写了很多关于这个问题的文章,例如 this one .

关于node.js - 在 RESTful API 中检查用户权限的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57623714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com