KeyCloak Introspection returns 401 while calling from spring app

Viewed 283

All, I am experiencing a strange behaviour. When I use curl to call ../token/introspect SSO is returning back a proper response but while invoking introspect endpoint using Spring Rest Template, I am getting the below error:

org.springframework.web.client.HttpClientErrorException$Unauthorized: 401 Unauthorized: "{"error":"invalid_request","error_description":"Authentication failed."}"

Keycloak logs

06:54:44,711 DEBUG [org.keycloak.authentication.AuthenticationProcessor] (default task-9) AUTHENTICATE CLIENT
06:54:44,711 DEBUG [org.keycloak.authentication.ClientAuthenticationFlow] (default task-9) client authenticator: client-secret
06:54:44,712 DEBUG [org.keycloak.authentication.ClientAuthenticationFlow] (default task-9) client authenticator: client-jwt
06:54:44,713 DEBUG [org.keycloak.authentication.ClientAuthenticationFlow] (default task-9) client authenticator: client-secret-jwt
*06:54:44,713 DEBUG [org.keycloak.authentication.ClientAuthenticationFlow] (default task-9) client authenticator: client-x509
*06:54:44,713 DEBUG [org.keycloak.services] (default task-9) KC-SERVICES0014: Failed client authentication: *org.keycloak.authentication.AuthenticationFlowException: Invalid client credentials
    at org.keycloak.key*


CODE

RestTemplate restTemplate = new RestTemplate();
        ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
        restTemplate.setRequestFactory(requestFactory);
        restTemplate.getInterceptors().add(new BasicAuthenticationInterceptor(clientId, clientSecret));
        var reqEntity= new RequestEntity<MultiValueMap<?, ?>>(requestBody(token),requestHeaders() , HttpMethod.POST, URI.create(introspectUri));  
    //  makeRequest(restTemplate,reqEntity);
        HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(requestHeaders(), requestBody(token));

        ResponseEntity<String> response =
            restTemplate.exchange(introspectUri,
                                  HttpMethod.POST,
                                  entity,
                                  String.class);

When I use curl/postman , I see the below logs :

06:57:12,930 DEBUG [org.keycloak.transaction.JtaTransactionWrapper] (default task-9) new JtaTransactionWrapper
06:57:12,930 DEBUG [org.keycloak.transaction.JtaTransactionWrapper] (default task-9) was existing? false
06:57:12,931 DEBUG [org.keycloak.authentication.AuthenticationProcessor] (default task-9) AUTHENTICATE CLIENT
06:57:12,931 DEBUG [org.keycloak.authentication.ClientAuthenticationFlow] (default task-9) client authenticator: client-secret
06:57:12,931 DEBUG [org.keycloak.authentication.ClientAuthenticationFlow] (default task-9) client authenticator SUCCESS: client-secret
06:57:12,931 DEBUG [org.keycloak.authentication.ClientAuthenticationFlow] (default task-9) Client consumer-test authenticated by client-secret
06:57:12,932 DEBUG [org.keycloak.events] (default task-9) type=INTROSPECT_TOKEN, realmId=**, clientId=consumer-test, userId=null, ipAddress=127.0.0.1, client_auth_method=client-secret

what could be the reason? Why Keycloak is invoking additional auth flows (client-x509) while calling the endpoint from Spring Boot App? How do I resolve this issue?

0 Answers
Related