private String exchangeToken()

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();
    }