第 15 章 Red Hat build of Keycloak policy enforcer
策略强制点(PEP)是一种设计模式,因此您可以以不同的方式实施它。Red Hat build of Keycloak 提供了为不同平台、环境和编程语言实施 PEP 所需的所有方法。红帽构建的 Keycloak 授权服务提供了一个 RESTful API,并利用 OAuth2 授权功能来使用集中式授权服务器进行精细授权。
PEP 负责实施红帽构建的 Keycloak 服务器的访问决策,通过评估与保护资源关联的策略来实施这些决策。它充当应用程序中过滤或拦截器,以检查对受保护的资源的特定请求是否可以根据这些决策授予的权限实现。
Red Hat build of Keycloak 提供内置支持,以便 红帽构建 Keycloak 策略 Enforcer 到具有内置支持来保护与 JakartaEE 兼容框架和 Web 容器的 Java 应用程序。如果使用 Maven,您应该为项目配置以下依赖项:
<dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-policy-enforcer</artifactId> <version>999.0.0-SNAPSHOT</version> </dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-policy-enforcer</artifactId>
<version>999.0.0-SNAPSHOT</version>
</dependency>
当您启用发送到应用程序的策略强制器时,会截获访问受保护的资源,具体取决于红帽构建的 Keycloak 权限到发出请求的身份。
策略强制使用红帽构建的 Keycloak 管理控制台与应用程序的路径以及您为资源服务器创建的资源相关联。https://docs.redhat.com/en/documentation/red_hat_build_of_keycloak/26.0/html-single/authorization_services_guide/#_resource_overview默认情况下,当您创建资源服务器时,Red Hat build of Keycloak 会为资源服务器创建一个 默认配置,以便您可以快速启用策略执行。
15.1. 配置 复制链接链接已复制到粘贴板!
策略强制配置使用 JSON 格式,如果您想根据资源服务器可用的资源自动解析受保护的路径,则不需要设置任何时间。
如果要手动定义受保护的资源,您可以使用稍微详细的格式:
以下是每个配置选项的描述:
enforcement-mode
指定如何强制实施策略。
ENFORCING
(默认模式)默认拒绝请求,即使没有与给定资源关联的策略。
PERMISSIVE
即使没有策略与给定资源关联,也允许请求。
DISABLED
完全禁用策略评估并允许访问任何资源。当
enforcement-mode
为DISABLED
时,应用程序仍然能够通过 授权上下文获取红帽构建的 Keycloak 授予的所有权限
on-deny-redirect-to
定义一个 URL,在从服务器获取"访问被拒绝"消息时重定向客户端请求。默认情况下,适配器会以 403 HTTP 状态代码进行响应。
path-cache
定义策略如何跟踪应用程序中的路径与 Red Hat build of Keycloak 中定义的资源之间的关联。需要缓存以避免通过路径和保护资源之间的缓存关联来避免对 Red Hat build of Keycloak 服务器的不必要的请求。
lifespan
定义条目应过期的时间(以毫秒为单位)。如果没有提供,则默认值为 30000。等于 0 的值可以设置为完全禁用缓存。这样设置一个等于 -1 的值来禁用缓存的过期。
max-entries
定义应在缓存中保留的条目的限值。如果没有提供,则默认值为 1000。
paths
指定保护的路径。此配置是可选的。如果没有定义,策略通过获取您在红帽构建的 Keycloak 中定义的资源来发现所有路径,其中这些资源使用代表应用程序中某些路径的
URIS
定义。name
要与给定路径关联的服务器上的资源名称。与 路径 结合使用时,策略强制执行器会忽略资源的 URIS 属性,并使用您提供的路径。
path
(必需)相对于应用程序上下文路径的 URI。如果指定了这个选项,策略会执行服务器查询具有相同值的 URI 的资源。目前,支持非常基本的路径匹配逻辑。有效路径示例包括:
-
通配符:
configured
-
后缀:
configured.html
-
子路径:
/path configured
- 路径参数: /resource/{id}
- 完全匹配:/resource
- patterns: /{version}/resource, /api/{version}/resource, /api/{version}/resource configured
-
通配符:
methods
HTTP 方法(如 GET、POST、PATCH)来保护以及它们如何与服务器中给定资源的范围关联。
方法
HTTP 方法的名称。
scopes
与方法关联的范围的字符串数组。当您将范围与特定方法关联时,尝试访问受保护的资源(或路径)的客户端必须提供 RPT,它将向列表中指定的所有范围授予权限。例如,如果您使用范围 创建 定义了方法 POST,RPT 必须包含在执行 POST 到路径时授予 创建 范围的访问权限。
scopes-enforcement-mode
引用与方法关联的范围的强制模式的字符串。值可以是 ALL 或 ANY。如果为 ALL,则必须授予所有定义的范围才能使用该方法访问资源。如果为 ANY,则应授予至少一个范围以获取使用该方法的资源的访问权限。默认情况下,强制模式设置为 ALL。
enforcement-mode
指定如何强制实施策略。
ENFORCING
(默认模式)默认拒绝请求,即使没有与给定资源关联的策略。
- DISABLED
claim-information-point
定义一组必须解析并推送到红帽构建的 Keycloak 服务器的一个或多个声明,以便这些声明可供策略使用。如需了解更多详细信息,请参阅 申索信息点。
lazy-load-paths
指定适配器应如何获取与应用程序中路径关联的资源的服务器。如果为 true,策略强制器将通过请求的路径相应地获取资源。当您不希望在部署过程中从服务器获取所有资源(如果您未提供
路径
),或者您只定义了一组子路径并希望按需获取其他路径
时,此配置特别有用。http-method-as-scope
指定范围应如何映射到 HTTP 方法。如果设置为 true,策略执行者将使用当前请求中的 HTTP 方法来检查是否应授予访问权限。启用后,请确保红帽构建的 Keycloak 中的资源与代表您要保护的每个 HTTP 方法的范围关联。
claim-information-point
定义一组必须解析并推送到红帽构建的 Keycloak 服务器的一个或多个 全局 声明,以便这些声明可供策略使用。如需了解更多详细信息,请参阅 申索信息点。