gpt4 book ai didi

spring-security - Spring Security和ABAC(基于属性的访问控制)

转载 作者:行者123 更新时间:2023-12-04 02:01:51 27 4
gpt4 key购买 nike

我们有一个中等规模的业务应用程序,并且我们大量使用Spring Security角色和权限(RBAC)来为某些实例以及隐藏在Spcc中@PreAuthorize标记中的规则打开和关闭角色。
我认为我们实际上已经实施了(不知道它是ABAC)。 XACML看起来非常复杂且肿,所以我不喜欢这里的答案:
How to change Spring Security roles by context?
有没有人在没有XACML的情况下实现了轻量级ABAC实现?我希望这可以使我们分离关注点,因为域对象只执行@PreAuthorize(WRITE)等操作,并且授权策略将与其分离。
从我所读的内容中,ABAC的基本原理非常简单。您有一个Action(非常类似于Permission)和一个机制来解决当前Principal是否对给定Subject具有该权限。
我知道AccessDecisionVoter大致是正确的一种界面,但我认为它不是用于对权限进行投票的。但是,使用此类实例来实施我们的授权策略似乎非常有吸引力。
很抱歉这个漫无边际的问题!基本上,我对ABAC感兴趣,但想避免自家酿制,但担心当我们需要塞斯纳时XACML是超大型飞机。

最佳答案

您似乎要针对两件事:


外部授权,您希望将访问控制策略移出代码(或至少移到代码的中央位置,而不是分散在整个Spring代码中)
基于属性的授权,您要在其中使用比角色和权限更丰富的属性


我不太确定(2),因为在我的书中,RBAC仍然是您要说的“行动和一种机制,用于解决当前Principal是否拥有该许可”。您还有其他条件需要根据哪些条件授予访问权限吗?用户的位置,一天中的时间,数据库中某些数据的值,所作用的资源的属性等?如果是这样,我们将流连于ABAC世界。无论哪种方式,我都会说RBAC是ABAC的子集,因为角色只是一个属性。

现在,对于(1),一般的模式是首先集中授权引擎并使用Spring批注来调用此authz。访问决策引擎。您有两种选择:


嵌入式身份验证。引擎:库实现引擎的地方,由代码像Java函数一样调用。可以是XACML引擎,也可以是您自己的RBAC / ABAC实现
作为网络服务:基于网络的(微)服务回答访问控制决策问题。可以是XACML引擎,也可以是您自己的RBAC / ABAC实现


为了获得基于Spring的代码来调用此authz。引擎,一种方法是编写自己的Spring Security选民。我发现更容易的另一种方法是编写自己的基于Spring Expression Language的表达式,然后可以使用现有的@ PreAuthorize,@ PostAuthorize,@ PreFilter和@ PostFiler,sec:authorize标记甚至是拦截URL调用它们条件。

这是我在Spring Security XACML PEP SDK上工作时使用的。即使您决定不将XACML用于访问决策策略或请求/响应通信,该方法也应同样有效。

关于spring-security - Spring Security和ABAC(基于属性的访问控制),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32004772/

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