Oauth 2.0 从自定义ABAC切换到XACML
我将使用OAuth2和XACML(使用AuthZForce)保护我的Spring云应用程序 我已经实现了一个简单的ABAC解决方案,可以处理以下用例,但我想切换到XACML。可能吗 旧域 我有(在数据库中):Oauth 2.0 从自定义ABAC切换到XACML,oauth-2.0,authorization,xacml,abac,alfa,Oauth 2.0,Authorization,Xacml,Abac,Alfa,我将使用OAuth2和XACML(使用AuthZForce)保护我的Spring云应用程序 我已经实现了一个简单的ABAC解决方案,可以处理以下用例,但我想切换到XACML。可能吗 旧域 我有(在数据库中): 策略(例如subject.id==resource.ownerId),由执行点检查以做出决策 具有某些已定义策略的权限(例如删除用户) 拥有某些权限的角色(如员工) 功能(如PREMIUM),包含一些默认的和公司可用的角色和权限 公司,有一些特点 分配给公司的用户 用例 现在,公司的用
- 策略(例如subject.id==resource.ownerId),由执行点检查以做出决策
- 具有某些已定义策略的权限(例如删除用户)
- 拥有某些权限的角色(如员工)
- 功能(如PREMIUM),包含一些默认的和公司可用的角色和权限
- 公司,有一些特点
- 分配给公司的用户
因为这个问题最初包含两个不同的问题,所以我决定将第二个问题外包()存储策略的地方基本上是不相关的。这将取决于您使用的引擎,例如AuthZForce(我已经ping了作者以便他可以插手)、SunXACML、WSO2或Axiomatics 免责声明:我为Axiomatics工作。我们确实使用数据库来存储XACML策略,但这不会改变授权要求或建模 我对你原来的帖子有一些评论
是我们在XACML中通常称为的条件。将两个属性比较在一起以实现关系subject.id==resource.ownerId
- 您提到权限,例如
。在XACML中,通常将这些属性拆分为原子属性,例如一方面是动作,另一方面是对象或资源(DELETE\u USER
)。RBAC是基于角色和权限的,而ABAC是基于属性的。理想情况下,这些属性表示单个方面(作为用户,尝试删除…)USER
仍存在于ABAC中。这将是你们政策的基础角色
- 功能和公司是您将使用的属性
谢谢你的详细回答。我发现我自己的解决方案类似于XACML,这很完美,因为迁移不会那么困难。但将策略存储在数据库中(在运行时更改策略)对我来说很重要。您知道哪些免费或开源解决方案支持此功能吗?我假设所有开源引擎都可以从数据库读取XACML策略。试试你提到的AT&T XACML、WSO2或AuthZForce。这是OSS社区中最新、最完整的问题之一。你知道我应该如何开始一个新问题吗。问题是它们都没有文档或文档稀少,所以我不知道哪一个最适合数据库策略。您好,作为AuthzForce开发人员之一,我可以提供帮助,但我需要首先澄清您的需求。据我所知,您需要一个XACML PDP,它可以从数据库加载XACML策略进行评估。是否有特定的策略存储格式?任何数据类型或产品?为了更好地解决您的用例,我邀请您通过我们的邮件列表与我们联系,该邮件列表在的支持部分提到。谢谢。我还建议您看看以获取基于角色的策略的示例,并了解如何使用XACML实现这一点。AuthzForce支持此配置文件。
namespace axiomatics{
namespace user{
attribute role{
category = subjectCat
id = "axiomatics.user.role"
type = string
}
attribute company{
category = subjectCat
id = "axiomatics.user.company"
type = string
}
attribute userId{
category = subjectCat
id = "axiomatics.user.userId"
type = string
}
}
namespace action{
attribute actionId{
category = actionCat
id = "axiomatics.action.actionId"
type = string
}
}
namespace resource{
attribute company{
category = resourceCat
id = "axiomatics.resource.company"
type = string
}
attribute owner{
category = resourceCat
id = "axiomatics.resource.owner"
type = string
}
}
policyset springapp{
apply firstApplicable
policy employees{
target clause user.role == "employee"
apply firstApplicable
/**
* Employees can create roles in their own company
*/
rule createRole{
target clause action.actionId=="create"
condition user.company==resource.company
permit
}
/**
* Employees can delete roles they own
*/
rule allowDelete{
target clause action.actionId == "delete"
condition user.userId == resource.owner
permit
}
}
}
}