想象一个Web安全系统,它由5个表组成,用于处理Web应用程序的授权部分:
有时,用户需要在短时间内被授予对权限规则的访问权限,然后再次被删除,例如当有人离开度假而其他人需要接管其中一项任务时。简短的回答是创建一个新角色,将该角色分配给用户,当不再需要该角色时,从用户中删除该角色或将其完全删除。
我宁愿不必一直为类似的东西创建角色。建议的一个解决方案是有一个名为userPermissionChanges的单独表,它将记录:
如果这是要添加到用户的额外权限,则addDenyFlag将为true,如果是需要删除的权限,则为false。在服务器范围查询和缓存用户权限时,我们还会包含/排除更改表,并对每个用户的权限进行必要的更改。
建议的解决方案理论上可行,但我不确定这是处理这个问题的好方法。有没有人有任何关于如何最好地解决这个问题的建议?这种情况是否应该遵循标准?
答案 0 :(得分:0)
这种情况是否应该遵循标准?
是的。您要做的是以与实际应用程序分离的方式实现您自己的授权逻辑。这称为外部授权管理。
有一种称为XACML的标准 - 可扩展访问控制标记语言的简称 - 由OASIS在过去10多年中开发。 XACML为您提供了什么?
XACML实现了一个名为基于属性的访问控制模型(NIST在此定义的ABAC),并使用策略来表达授权约束。
示例:
您使用的用例涉及临时分配和代理委派用例。你可以按如下方式实现前者:
后一种情况需要
动作,角色,委托,项目类型都是属性。您可以使用的属性数量没有限制。你需要弄清楚的是从哪里读取它们。
使用XACML有几个好处:
查看我的SlideShare account了解更多信息,或查看我的blog示例。