【发布时间】:2021-01-04 02:44:52
【问题描述】:
我正在尝试通过 Java 11 的 HttpClient 从 Keycloack 服务器获取访问令牌。但我不断收到错误消息:
{
"error":"invalid_request",
"error_description":"Missing form parameter: grant_type"
}
顺便说一句,用邮递员,我可以得到令牌。我在我的代码中所做的是:
Map<String, String> values = new HashMap<>() {{
put("username", username);
put ("password", password);
put("grant_type", "password");
}};
ObjectMapper objectMapper = new ObjectMapper();
String requestBody = objectMapper.writerWithDefaultPrettyPrinter()
.writeValueAsString(values);
HttpRequest request=HttpRequest.newBuilder()
.uri(URI.create(tokenEndpoint))
.setHeader("client_id", clientId)
.setHeader("client_secret", clientSecret)
.setHeader("content-type", "application/x-www-form-urlencoded")
.POST(HttpRequest.BodyPublishers.ofString(requestBody))
.build();
HttpClient.newHttpClient()
.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println);
/*
//Tried also
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
*/
我做错了什么或错过了什么?
【问题讨论】:
标签: passwords httpclient keycloak java-11