我正在尝试弄清楚如何使用Balana的XACML实现实现授权机制(WSO2的授权引擎是基于Balana的)。
当用户请求访问单个资源(例如,bob想要读取医疗记录)时,事情很简单。
但是,假设bob想要阅读他所有病人的医疗记录。这里的第一个问题是,需要有一种方法来找出谁是他的病人。我还需要他的病人的每一份个人记录的属性。问题是,我正在努力解决这种情况,同时将对我的PIP的属性请求数量保持在最小。
换句话说,我的目标是:我正在尝试根据PIP返回的属性评估Bob是否有权访问多个医疗记录(在创建决策请求时,这些记录是未知的)(例如,我希望我的PIP与数据库的交互尽可能少)。
简而言之,我发现当尝试使用XACML控制对资源集合的访问时,事情变得很棘手。
我在这里找到了几个选项:
我已经阅读了规范,我到处挖掘,但我还没有找到任何解决这个问题的方法。有谁有什么想法吗?提前感谢!
发布于 2018-06-07 04:06:43
简而言之,我发现当尝试使用
控制对资源集合的访问时,事情变得很棘手。
你是正确的。XACML很好地解决了事务性和功能性访问控制问题。它不能很好地处理数据访问控制。
我不确定我是否完全掌握了你的三种方法,但你确实强调了相关的问题,即
are
根据我的经验,当您在数千个请求中时,多个决策配置文件请求可以很好地工作。除此之外,我会考虑Axiomatics反向查询(免责声明-我为Axiomatics工作)。反向查询通过公开一个允许您提出开放式问题的API来解决您的问题,例如
响应将是必须满足的一组条件。例如,如果以下是您的策略(使用ALFA表示法):
使用ALFA表示法的XACML策略
policy accessMedicalRecord{
target clause com.axiomatics.examples.actionId == "view" and objectType == "medical record"
apply firstApplicable
/**
* Doctors can view medical records of patients they are assigned to
*/
rule allowRegularAccess{
target clause user.role == "doctor"
condition patient.assignedDoctor == user.identifier
permit
}
}
示例ARQ请求/响应
view?
patient.assignedDoctor == "Alice"
,医生Alice,
答案可以翻译成查询语言,例如SQL:
SELECT id FROM MED_RECORDS WHERE assignedDoc = 'Alice';
它也可以是另一种查询语言。然后使用它来查询数据的来源,例如SQL数据库,并检索相关的医疗记录。
另请参阅此Stackoverflow Q&A。
https://stackoverflow.com/questions/50707394
复制相似问题