我试图在我的应用程序(微服务架构)中实现ABAC模型,我有一个问题。我有一个用户U,它对集合CollectionX的一个项目X有"拒绝"权限。我不明白,我该如何实现下一种情况——用户U从CollectionX中获得所有物品,但没有物品X。如何在ABAC模型中实现这种情况?
在XACML (ABAC标准)中,自然的方法是使用具有重复类别(多个<属性比;在单个XACML请求中使用相同的类别)。如果PDP支持MDP(例如AuthzForce),您的PEP可以按照以下方式发出XACML请求(这里简化了格式,而不是实际的XACML):>
- 主题类别(<属性>)/subject-id =用户身份,例如用户U (<属性祝辞)>属性>
- 资源类别(<属性>)/resource-id =项目1 (<属性比;IncludeInResult>属性>
- 资源类别(<属性>)/资源-id =项目2 (<属性比;IncludeInResult>属性>
- …等,用于CollectionX 中的所有项目
所以在同一个XACML请求中,你重复了<属性比;具有资源id>
PDP将作为多个XACML请求处理:
- 请求1:Subject category/Subject -id = U;资源类别/资源id =项目1 (IncludeInResult=true)
- 请求2:Subject category/Subject -id = U;资源类别/资源id =项目2 (IncludeInResult=true)
- …等,用于收集X 中的所有项目
…并回复一个XACML <响应比;有多个><结果>s,上面每个单独的请求一个,只包括IncludeInResult=true的属性(即本例中的资源id):结果>
- 结果1:Decision=Permit,属性:resource category/resource-id = item 1
- 结果2:Decision=Permit,属性:resource category/resource-id = item 2
- …
- 结果N: Decision=Deny,属性:resource category/resource-id = item X
- …
- …等,用于收集X 中的所有项目
只要PDP支持XACML的JSON Profile(例如AuthzForce),就可以使用XML或JSON。
如果PDP是远程的,我强烈建议在PEP中缓存决策结果。