9.2. 声明信息点
声明信息点(CIP)负责解析声明并将这些声明推送到红帽 Keycloak 服务器,以提供有关策略访问上下文的更多信息。它们可以定义为 policy-enforcer 的配置选项,以便从不同源解析声明,例如:
- HTTP 请求(参数、标头、正文等)
- 外部 HTTP 服务
- 配置中定义的静态值
- 通过实施 Claim Information Provider SPI 的任何其他源
将声明推送到红帽 Keycloak 服务器构建时,策略不仅可以基于用户是谁,还可以考虑上下文和内容,具体根据谁、原因、何时、位置以及给定交易而考虑。它是基于上下文的授权,以及如何使用运行时信息来支持精细的授权决策。
9.2.1. 从 HTTP 请求获取信息 复制链接链接已复制到粘贴板!
以下是如何从 HTTP 请求中提取声明的几个示例:
keycloak.json
9.2.2. 从外部 HTTP 服务获取信息 复制链接链接已复制到粘贴板!
以下是如何从外部 HTTP 服务提取声明的几个示例:
keycloak.json
9.2.3. 静态声明 复制链接链接已复制到粘贴板!
keycloak.json
9.2.4. 声明信息供应商 SPI 复制链接链接已复制到粘贴板!
当没有内置供应商足以满足其要求时,开发人员可以使用 Claim Information Provider SPI 来支持不同的声明信息点。
例如,要实施一个新的 CIP 供应商,您需要在应用程序的 classpath 中实施 org.keycloak.adapters.authorization.ClaimInformationPointProviderFactory
和 ClaimInformationPointProvider
,并提供文件 META-INF/services/org.keycloak.adapters.authorization.ClaimInformationPointProviderFactory
。
org.keycloak.adapters.authorization.ClaimInformationPointProviderFactory
示例:
每个 CIP 供应商都必须与名称关联,如 MyClaimInformationPointProviderFactory.getName
方法中所述。名称将用于将 policy-enforcer
配置中的 claim-information-point
部分中的配置映射到实施。
在处理请求时,策略 enforcer 将调用 MyClaimInformationPointProviderFactory.create 方法,以获取 MyClaimInformationPointProvider 实例。在调用时,为这个特定 CIP 供应商(通过 claim-information-point)定义的任何配置都作为映射传递。
ClaimInformationPointProvider
示例: