我正在为Keycloak 4.x实现自定义OIDC协议映射器。在其中,我必须建立一个https连接,该连接当前失败,因为我的http连接上没有配置信任库。
我已在我的standalone.xml中添加了一个信任库SPI(如此处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 =新的org.keycloak.connections.httpclient.HttpClientBuilder()。build();
和
DefaultHttpClientFactory factory =新的DefaultHttpClientFactory(); HttpClientProvider httpClientProvider = factory.create((KeycloakSession)session); 返回httpClientProvider.getHttpClient();
而第一个只是未配置信任库,而第二个由于NPE而失败。
那么如何获得使用我的信任库SPI的出站http连接?
答案 0 :(得分:1)
请参见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;
}