出于测试目的,我们设置了一个允许对一个资源进行GET操作的给定策略给具有管理员角色的用户。
然后我们使用" PEP TryIt"用于检查策略如何应用于具有和不具有Manager角色的用户的表单,以及删除和添加角色后的权限。我们发现了这两种行为: 1)PEP TryIt,返回Permit,用于已删除其经理角色的给定用户 =>意外。 只有在将给定策略发布到PDP后,系统才会返回NotApplicable。
2)对于已经重新分配了经理角色的给定用户,PEP TryIt返回NotApplicable =>意外 只有在将给定策略发布到PDP后,系统才会返回Permit。
每次向给定用户授予/删除角色时,是否需要将策略发布到PDP?这是预期的行为还是应该被视为错误?
谢谢! Fermin Ordaz。
答案 0 :(得分:0)
是的..我猜你已经体验过正确的行为......
Carbon用户存储是PDP的属性查找器(PIP)。基本上Carbon用户存储是默认的PIP实现。在PIP级别,PDP引入了属性缓存。简而言之,我们可以说它缓存了用户的属性(这里是用户的角色)。您的分配修改,PIP缓存不知道。 (因为用户存储和PDP充当两个独立的实体)因此它不能使缓存无效。这已经导致经历了上述结果。基本上属性源(用户存储或任何)独立于PDP,它们可以单独运行。有两种方法可以解决这个问题,
更新与PIP相关的任何属性后。您可以使用UI或API清除属性缓存。在UI中,您可以转到Entitlement-> PDP->Extension
并显示清除属性缓存的图标。这已通过管理服务公开..因此您也可以从某些外部应用程序调用此方法。
您可以使用entitlement.properties
目录中的<IS_HOME>/repository/conf/security
文件来禁用或减少属性缓存的失效值
PDP.AttributeCaching.Enable =真
PDP.AttributeCaching.CachingInterval = 300
另外,对于NotApplicable
,我猜你没有在PDP中启用策略。一旦你向PDP发布了一个策略..必须启用它才能把它放到实际的运行时