Oys*_*rD3 2 authentication authorization node.js express jwt
我正在为我的公司开发一个内部管理系统。一些 API 路由将检查用户的角色,其余路由将检查用户的权限。
目前,我在做什么是在 JWT 令牌中存储用户的权限
{
"user": {
"name": "Oyster Lee",
"role": "root",
"image": ""
},
"OMS": 2147483647,
"WMS": 4095,
"iat": 1566536007,
"exp": 1567140807,
"iss": "Test"
}
Run Code Online (Sandbox Code Playgroud)
我的许可是使用按位运算符。但它在每个系统中最多只能使用 31 种权限。我有超过 31 个,因此需要替换按位运算符。
除此之外,在我为用户分配新的权限或角色后,他必须一次又一次地注销和登录。
我在想,每次他们向路由发送请求时,我是否应该检查数据库以获取用户的许可。会不会导致应用更重?有什么优点和缺点吗?顺便说一下,我使用 MySQL 作为我们的数据库。
前端还需要根据用户的权限或角色进行有条件的渲染。我使用 Nuxt.js SPA 作为前端。
您正在构建的系统存在多个问题:
My permission is using a bitwise operator. But it can only use up to 31 types of permission in each system. I have more than 31 so the bitwise operator will need to be replaced.That just won't scale硬编码自己的逻辑您需要的是从内部管理系统 API 中分离和外部化授权逻辑。有一种称为基于属性的访问控制 (ABAC) 的模式可以实现这一点。使用 ABAC,您有一个基于拦截的模型,其中策略执行点(PEP) 拦截对您的 API 的调用并检查策略决策点(PDP) 是否应允许调用者 (Alice) 访问它们的任何内容请求(文件、记录...)。
PDP 配置了策略,这些策略使用属性来描述可以发生或不可以发生的事情。例如:
编写此类策略有两个标准:alfa和xacml。ABAC 架构有多种实现,包括开源(AuthZForce、AT&T...)和商业(Axiomatics)。一定要检查一下。我也在其他 SO 帖子中写了很多关于这个问题的文章,例如this one。
| 归档时间: |
|
| 查看次数: |
3145 次 |
| 最近记录: |