基于JavaScript的策略
您可以使用此类型的策略来定义使用JavaScript的权限的条件。它是Keycloak支持的基于规则的策略类型之一,可以灵活地编写基于Evaluation API的任何策略。
要创建新的基于JavaScript的策略,请在策略列表右上角的下拉列表中选择JavaScript。
配置
- Name
描述政策的人性可读和唯一的字符串。最佳做法是使用与您的业务和安全要求密切相关的名称,以便您更轻松地识别它们。
- Description
包含有关此策略详细信息的字符串。
- Code
JavaScript代码为此策略提供条件。
- Logic
在其他条件得到评估之后,该政策的逻辑应用。
例子
以下是使用基于属性的访问控制(ABAC)基于从执行上下文获取的属性来定义条件的基于JavaScript的策略的简单示例:
var context = $evaluation.getContext();
var contextAttributes = context.getAttributes();
if (contextAttributes.containsValue('kc.client.network.ip_address', '127.0.0.1')) {
$evaluation.grant();
}
还可以使用基于角色的访问控制(RBAC):
var context = $evaluation.getContext();
var identity = context.getIdentity();
if (identity.hasRole('keycloak_user')) {
$evaluation.grant();
}
或者几种访问控制机制的组合:
var context = $evaluation.getContext();
var identity = context.getIdentity();
var attributes = identity.getAttributes();
var email = attributes.getValue('email').asString(0);
if (identity.hasRole('admin') || email.endsWith('@keycloak.org')) {
$evaluation.grant();
}
在编写自己的规则时,请记住$evaluation对象是一个实现org.keycloak.authorization.policy.evaluation.Evaluation的对象。有关您可以从此界面访问的更多信息,请参阅EvaluationAPI。