我写了一些义务和建议,但我想知道是否有一种被广泛接受/或正式的方式来正确地做到这一点?换句话说:在 ALFA 中是否有使用义务和建议的标准或首选方式?
我真的很想看一个例子,如何在拒绝和允许时总是触发(在每个请求上)的分层策略中定义义务(例如记录每个请求)及其内容?或者您是否必须为每个策略集/策略和规则定义单独的义务?
您是否必须定义此类义务的确切内容,或者这取决于 PEP 的功能?
这是一个很好的问题。
虽然规范(所有版本)确实定义了义务的结构,甚至在 XACML 3.0 的情况下也定义了建议,但规范没有提到 PEP(策略执行点)如何实现义务。规范中提到的所有内容都是如果 PEP 未能履行义务会发生什么,即决定会发生什么。
从 PEP 代码的角度来看,最佳实践是编写一个ObligationHandler
接口,您可以为不同的义务实现该接口。实现ObligationHandler
接口的类的构造函数将接受 XACML 请求和响应。
例子
obligation emailManager = "com.axiomatics.example.obligations.emailmanager"
policy documentAccess{
apply firstApplicable
rule allowAccessIfClearanceSufficient{
condition user.clearance>document.classification
permit
on permit {
obligation emailManager{
email = email
message = stringConcatenate("Employee ",
stringOneAndOnly(Attributes.subjectId),
" has obtained access to ",
stringOneAndOnly(Attributes.resourceId)
)
}
}
}
}
其他资源: