Я создаю интерфейс HttpClient для микронавтов, чтобы использовать внешнюю конечную точку.
В основном мне нужно отправить сообщение с Content-Type: application / x-www-form-urlencoded
Это мой интерфейс
@Client("${keycloak.base-url}/")
public interface IKeycloakClient {
@Post(value="/auth/realms/master/protocol/openid-connect/token", processes = { MediaType.APPLICATION_JSON,MediaType.APPLICATION_FORM_URLENCODED })
public AuthenticationData getToken(@Body Map<String,String> body);
public void createUser();
public class AuthenticationData {
private String accessToken;
public String getAccessToken() {
return this.accessToken;
}
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
}
}
}
Я создаю тело следующим образом
HashMap<String, String> body = new HashMap<>();
body.put("client_id", "admin-cli");
body.put("grant_type", "password");
body.put("username", kConfiguration.getAdminUser());
body.put("password", kConfiguration.getAdminSecret());
IKeycloakClient.AuthenticationData token = kc.getToken(body);
Когда я вызываю метод kc.getToken(body)
, я вижу вызов трассировки:
DEBUG i.m.http.client.DefaultHttpClient - Sending HTTP Request: POST /auth/realms/master/protocol/openid-connect/token
DEBUG i.m.http.client.DefaultHttpClient - Chosen Server: keycloakserver(-1)
TRACE i.m.http.client.DefaultHttpClient - host: keycloakserver
TRACE i.m.http.client.DefaultHttpClient - connection: close
TRACE i.m.http.client.DefaultHttpClient - content-type: application/json
TRACE i.m.http.client.DefaultHttpClient - content-length: 87
TRACE i.m.http.client.DefaultHttpClient - Request Body
TRACE i.m.http.client.DefaultHttpClient - ----
TRACE i.m.http.client.DefaultHttpClient - {"password":"admin","grant_type":"password","client_id":"admin-cli","username":"admin"}
TRACE i.m.http.client.DefaultHttpClient - ----
TRACE i.m.http.client.DefaultHttpClient - HTTP Client Response Received for Request: POST /auth/realms/master/protocol/openid-connect/token
TRACE i.m.http.client.DefaultHttpClient - Status Code: 400 Bad Request
TRACE i.m.http.client.DefaultHttpClient - Content-Type: application/json
TRACE i.m.http.client.DefaultHttpClient - Date: Tue, 02 Oct 2018 22:47:01 GMT
TRACE i.m.http.client.DefaultHttpClient - Server: nginx/1.15.2
TRACE i.m.http.client.DefaultHttpClient - Content-Length: 84
TRACE i.m.http.client.DefaultHttpClient - Connection: Close
TRACE i.m.http.client.DefaultHttpClient - Response Body
TRACE i.m.http.client.DefaultHttpClient - ----
TRACE i.m.http.client.DefaultHttpClient - {"error":"invalid_request","error_description":"Missing form parameter: grant_type"}
Читая ошибку, я почти уверен, что проблема в Content-Type: application/json
Я уже тестировал конечную точку с помощью почтальона и с application/x-www-form-urlencoded
отлично работает.
это может быть запрос почтальона:
POST /auth/realms/master/protocol/openid-connect/token HTTP/1.1
Host: keycloakserver
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
Мне нужна помощь для решения этой проблемы.
Заранее спасибо