第 9 章 策略强制器
策略强制点(PEP)是一种设计模式,因此您可以以不同的方式实施它。红帽构建的 Keycloak 提供了为不同平台、环境和编程语言实施 PEP 所需的所有方法。红帽构建的 Keycloak 授权服务提供了一个 RESTful API,并使用集中式授权服务器利用 OAuth2 授权功能进行精细的授权。
PEP 负责红帽构建的 Keycloak 服务器的访问决策,其中通过评估与受保护的资源关联的策略来实现这些决策。它充当应用程序中的过滤器或拦截器,以便根据这些决策授予的权限,检查对受保护资源的特定请求是否可以满足。
Red Hat build of Keycloak 提供内置的支持,为启用红帽为 Java 应用程序 构建的 Keycloak 策略Enforcer Enforcer 提供内置支持,以保护 JakartaEE 兼容的框架和 Web 容器。如果使用 Maven,您应该为项目配置以下依赖项:
<dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-policy-enforcer</artifactId> <version>${keycloak.version}</version> </dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-policy-enforcer</artifactId>
<version>${keycloak.version}</version>
</dependency>
当您启用策略强制程序时,发送到应用程序的所有请求都会被截获,并被授予对受保护的资源的访问权限,具体取决于红帽构建 Keycloak 向发出请求的权限。
策略强制通过红帽构建的 Keycloak 管理控制台与应用程序的路径和您为资源服务器创建的资源相关联。???默认情况下,当创建资源服务器时,红帽构建的 Keycloak 会为资源服务器创建一个 默认配置,以便您可以快速启用策略强制。
9.1. Configuration 复制链接链接已复制到粘贴板!
策略强制器配置使用 JSON 格式,以及大多数不需要设置任何时间,如果您想要根据资源服务器中可用的资源自动解析受保护的路径。
如果要手动定义受保护的资源,您可以使用稍微更详细的格式:
以下是每个配置选项的描述:
enforcement-mode
指定策略的强制执行方式。
ENFORCING
(默认模式)默认拒绝请求,即使没有策略与给定资源关联。
PERMISSIVE
即使没有与给定资源关联的策略,也允许请求。
DISABLED
完全禁用策略评估并允许访问任何资源。当
强制模式
是DISABLED
时,应用程序仍然能够通过 Authorization 上下文获取红帽构建的 Keycloak 授予的所有权限
on-deny-redirect-to
定义一个 URL,当从服务器获取"access denied"消息时,客户端请求会被重定向。默认情况下,适配器会使用 403 HTTP 状态代码进行响应。
path-cache
定义策略实施器应如何跟踪应用程序和红帽构建的 Keycloak 中定义的路径之间的关联。为了避免对红帽构建的 Keycloak 服务器进行不必要的请求,需要在路径和受保护的资源之间缓存关联,以避免对红帽构建的 Keycloak 服务器进行不必要的请求。
Lifespan
定义条目应过期的时间(毫秒)。如果没有提供,则默认值为 30000。等于 0 的值可以被设置为完全禁用缓存。这样设置一个等于 -1 的值来禁用缓存的过期。
max-entries
定义应保存在缓存中的条目限制。如果没有提供,则默认值为 1000。
paths
指定要保护的路径。这个配置是可选的。如果没有定义,策略强制程序通过在 Keycloak 的红帽构建中获取您定义的资源来发现所有路径,其中这些资源使用代表应用程序中的一些路径的
URIS
定义。name
要与给定路径关联的服务器上的资源名称。与 路径 一起使用时,策略强制程序会忽略资源的 URIS 属性,并使用您提供的路径。
path
(必需)相对于应用程序上下文路径的 URI。如果指定了这个选项,策略 enforcer 会查询服务器以获取具有相同值的 URI 的资源。目前支持路径匹配的基本逻辑。有效路径示例如下:
-
wildcard:
IANA
-
后缀:
IANA.html
-
子路径:
/path the
- 路径参数: /resource/{id}
- 完全匹配: /resource
- patterns: /{version}/resource, /api/{version}/resource, /api/{version}/resource945
-
wildcard:
方法
HTTP 方法(如 GET、POST、PATCH)来保护以及它们如何与服务器中给定资源的范围关联。
方法
HTTP 方法的名称。
范围
与方法关联的范围相关的字符串数组。当您将范围与特定方法关联时,尝试访问受保护的资源(或路径)的客户端必须提供一个 RPT,授予列表中指定的所有范围的权限。例如,如果您使用 scope create 定义 POST 方法,RPT 必须包含在对路径执行 POST 时授予对 create 范围的访问权限。
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 服务器的红帽构建的一个或多个 全局 声明,以便这些声明可供策略使用。如需了解更多详细信息,请参阅声明信息点。