基于规则的策略
使用这种类型的策略,您可以使用Drools定义条件,这是一个规则评估环境。它是Keycloak支持的基于规则的策略类型之一,并提供了基于Evaluation API编写任何策略的灵活性。
要创建新的基于规则的策略,请在策略列表右上角的下拉列表中选择规则。
配置
- Name
描述政策的人性可读和唯一的字符串。我们强烈建议您使用与您的业务和安全要求密切相关的名称,以便您更容易地识别它们,并且知道它们的实际意义。
- Description
一个字符串,包含有关此策略的详细信息。
- Policy Maven Artifact
指向定义规则的工件的Maven groupId-artifactId-version(GAV)。提供GAV后,您可以单击解析以加载模块和会话字段。
- Group Id
该规则的groupId
- Artifact Id
该规则的artifactId
- Version
该规则的版本。
- Module
本策略使用的模块。必须提供一个模块来选择将加载规则的特定会话。
- Session
本政策使用的会话。会话提供了在处理策略时评估的所有规则。
- Update Period
指定扫描规则更新的间隔。
- Logic
在其他条件得到鉴定之后,该政策的逻辑应用。
Examples
以下是基于Drools的策略的一个简单示例,该策略使用基于属性的访问控制(ABAC)来定义只有经过身份验证的用户是所请求资源的所有者才能评估为GRANT的条件:
import org.keycloak.authorization.policy.evaluation.Evaluation;
rule "Authorize Resource Owner"
dialect "mvel"
when
$evaluation : Evaluation(
$identity: context.identity,
$permission: permission,
$permission.resource != null && $permission.resource.owner.equals($identity.id)
)
then
$evaluation.grant();
end
您甚至可以使用ABAC的其他变体从身份获取属性并相应地定义条件:
import org.keycloak.authorization.policy.evaluation.Evaluation;
rule "Authorize Using Identity Information"
dialect "mvel"
when
$evaluation : Evaluation(
$identity: context.identity,
identity.attributes.containsValue("someAttribute", "you_can_access")
)
then
$evaluation.grant();
end
有关可以从org.keycloak.authorization.policy.evaluation.Evaluation界面访问的更多信息,请参阅Evaluation API