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?