Keycloak:SPI 中的出站 SSL 连接

Keycloak: Outbound SSL Connection in SPI

我正在为 Keycloak 4.x 实施自定义 OIDC 协议映射器。我必须在其中建立一个 https 连接,该连接目前失败了,因为我没有在我的 http 连接上配置信任库。

我已将信任库 SPI 添加到我的 standalone.xml(如此处所述https://www.keycloak.org/docs/latest/server_installation/index.html#_truststore):

        <spi name="truststore">
            <provider name="file" enabled="true">
                <properties>
                    <property name="file" value="${jboss.server.config.dir}/nak.test.jks"/>
                    <property name="password" value="****"/>
                    <property name="hostname-verification-policy" value="WILDCARD"/>
                    <property name="disabled" value="false"/>
                </properties>
            </provider>
        </spi>

但我不知道如何获取使用此信任库的 HttpClient 实例。我试过:

org.apache.http.client.HttpClient httpClient = new org.keycloak.connections.httpclient.HttpClientBuilder().build();

DefaultHttpClientFactory factory = new DefaultHttpClientFactory(); HttpClientProvider httpClientProvider = factory.create((KeycloakSession)session); return httpClientProvider.getHttpClient();

而第一个只是没有配置信任库,第二个失败并出现 NPE。

那么如何获得使用我的信任库 SPI 的出站 http 连接?

https://lists.jboss.org/pipermail/keycloak-user/2018-July/014878.html

我是这样实现的,使用了Keycloak的Truststore SPI:

private org.apache.http.client.HttpClient getConnection(org.keycloak.models.KeycloakSession session) {
    org.keycloak.connections.httpclient.HttpClientProvider cp = session.getProvider(org.keycloak.connections.httpclient.HttpClientProvider.class);
    HttpClient httpClient = cp.getHttpClient();
    return httpClient;
}