策略鉴定API
当使用JavaScript或JBoss Drools编写基于规则的策略时,Keycloak提供了一个评估API,它提供了有用的信息,以帮助确定是否应授予权限。
该API由几个接口组成,可让您访问以下信息:
请求许可
请求权限的身份,您可以从中获得声明/属性
运行时环境和与执行上下文相关联的任何其他属性
主接口是org.keycloak.authorization.policy.evaluation.Evaluation,其定义了以下实现:
public interface Evaluation {
/**
* Returns the {@link ResourcePermission} to be evaluated.
*
* @return the permission to be evaluated
*/
ResourcePermission getPermission();
/**
* Returns the {@link EvaluationContext}. Which provides access to the whole evaluation runtime context.
*
* @return the evaluation context
*/
EvaluationContext getContext();
/**
* Grants the requested permission to the caller.
*/
void grant();
/**
* Denies the requested permission.
*/
void deny();
}
在处理授权请求时,Keycloak在鉴定任何策略之前创建一个评估实例。然后将此实例传递给每个策略,以确定访问权限是GRANT还是DENY。策略通过在鉴定实例上调用grant()或deny()方法来确定这一点。默认情况下,鉴定实例的状态被拒绝,这意味着您的策略必须显式调用grant()方法来向策略鉴定引擎指示应授予权限。
有关评估API的更多信息,请参阅JavaDocs。
鉴定背景
评估环境在评估过程中为政策提供有用的信息。
public interface EvaluationContext {
/**
* Returns the {@link Identity} that represents an entity (person or non-person) to which the permissions must be granted, or not.
*
* @return the identity to which the permissions must be granted, or not
*/
Identity getIdentity();
/**
* Returns all attributes within the current execution and runtime environment.
*
* @return the attributes within the current execution and runtime environment
*/
Attributes getAttributes();
}
从这个界面可以得到:
- 认证身份
- 有关执行上下文和运行时环境的信息
身份是基于与授权请求一起发送的OAuth2访问令牌构建的,并且该结构可以访问从原始令牌中提取的所有声明。例如,如果您使用协议映射程序在OAuth2访问令牌中包含自定义声明,您还可以从策略中访问此声明,并使用它来构建条件。
EvaluationContext还允许您访问与执行环境和运行时环境相关的属性。现在只有几个内置的属性。
Name | Description | Type |
---|---|---|
kc.time.date_time | Current date and time | String. FormatMM/dd/yyyy hh:mm:ss |
kc.client.network.ip_address | IPv4 address of the client | String |
kc.client.network.host | Client’s host name | String |
kc.client.id | The client id | String |
kc.client.user_agent | The value of the 'User-Agent' HTTP header | String[] |
kc.realm.name | The name of the realm | String |