9.2.4. 声明信息供应商 SPI


如果任何内置供应商都足够满足要求,则开发人员可使用 Claim Information Provider SPI 来支持不同的声明信息点。

例如,要实施新的 CIP 提供程序,您需要实施 org.keycloak.adapters.authorization.ClaimInformationPointProvideryClaimInformationPointProvider,同时还在应用程序类的 META-INF/services/org.keycloak.adapters.authorization.ClaimInformationPointProviderFactory.

org.keycloak.adapters.authorization.ClaimInformationPointProviderFactory 示例:

public class MyClaimInformationPointProviderFactory implements ClaimInformationPointProviderFactory<MyClaimInformationPointProvider> {

    @Override
    public String getName() {
        return "my-claims";
    }

    @Override
    public void init(PolicyEnforcer policyEnforcer) {

    }

    @Override
    public MyClaimInformationPointProvider create(Map<String, Object> config) {
        return new MyClaimInformationPointProvider(config);
    }
}
Copy to Clipboard Toggle word wrap

每个 CIP 供应商必须与一个名称关联,如 MyClaimInformationPointProviderFactory.getName 方法所定义。name 将用于从 policy-enforcer 配置的 claim-information-point 部分映射到实施。

在处理请求时,策略 enforcer 将调用 MyClaimInformationPointProviderFactory.create 方法来获取 MyClaimInformationPointProvider 实例。调用时,为这个特定 CIP 提供程序(通过 claim-information-point)定义的配置都会作为映射传递。

ClaimInformationPointProvider 示例:

public class MyClaimInformationPointProvider implements ClaimInformationPointProvider {

    private final Map<String, Object> config;

    public ClaimsInformationPointProvider(Map<String, Object> config) {
        this.config = config;
    }

    @Override
    public Map<String, List<String>> resolve(HttpFacade httpFacade) {
        Map<String, List<String>> claims = new HashMap<>();

        // put whatever claim you want into the map

        return claims;
    }
}
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat