策略鉴定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

results matching ""

    No results matching ""