我的问题适用于 wso2 身份服务器 4.5 (IS) 和 balana“独立”。
按照“XACML v3.0 Multiple Decision Profile Version 1.0”中的规定,我成功处理了发送到 IS(PDP 的 Web 服务接口)中授权服务的 XACML 多个请求。
我在网上找到了几个自定义“属性查找器”的示例,但在所有这些示例中,实现检索主题的属性(例如主题的角色)而不是资源的属性。在我的用例中,我将向 PDP 发送一个 xacml 请求,其中包含主题的所有属性和资源 ID 列表。我已经实现了一个属性查找器来从外部系统(例如数据库或 Web 服务)检索资源的属性。第一个问题是:是否出于同样的原因不推荐这种方法?
如果资源数量增加,第二个问题涉及此 AttributeFinder 实现的性能。
假设我们已经限制了可以在策略定义中使用的资源属性列表。例如少量的属性。
来自 org.wso2.balana.finder.AttributeFinderModule 的方法:
public EvaluationResult findAttribute(URI attributeType, URI attributeId,
String issuer, URI category, EvaluationCtx context)
必须返回单个属性的值/值。因此,如果策略评估资源的更多属性,则此方法会为同一资源调用更多次。如果我在第一次调用该方法时读取资源的所有属性并保存可用于的数据(例如,在线程局部变量上),我可以避免为同一资源的不同属性多次调用外部系统随后的调用。
因此,如果我有多个请求,并且资源属性的策略适用于该请求,则不仅针对同一资源的每个属性,而且针对每个资源,都会多次调用该方法。为了提高性能,我想减少对外部系统的调用次数,因此我想在第一次调用“findAttribute”方法时读取所有资源的属性(如果我有一个非常大的集合,则为子集)。为此,我需要在“findAttribute”方法中访问请求中所有资源 ID 的列表。我在属性查找器中收到的 EvaluationCtx 只是从多个请求构建的 Set 中的其中一个。完整集在方法 org.wso2.balana.PDP.evaluate(EvaluationCtx) 中循环处理,在方法中不可用"
例如,我可以扩展 PDP 类以在线程局部变量中发布完整的 EvaluationCtx 集(或资源 ID 列表),但这可以在“balana Standalone”中工作,而不是在 wso2 身份服务器中。有任何想法吗?
谢谢你。斯特凡诺