in src/main/java/com/epam/aidial/auth/helper/services/keycloak/KeyCloakAuthProvider.java [27:49]
private String exchangeToken(String keyCloakToken, String idpAlias) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
map.add("client_id", authProviderConfig.getClientId());
map.add("client_secret", authProviderConfig.getClientSecret());
map.add("grant_type", "urn:ietf:params:oauth:grant-type:token-exchange");
map.add("subject_token", keyCloakToken);
map.add("requested_token_type", "urn:ietf:params:oauth:token-type:access_token");
map.add("requested_issuer", idpAlias);
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
ResponseEntity<String> response = rest.postForEntity(authProviderConfig.getProviderUri() + "/protocol/openid-connect/token", request, String.class);
JsonNode root;
try {
root = mapper.readTree(response.getBody());
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
return root.get("access_token").asText();
}