【发布时间】:2020-05-01 03:27:47
【问题描述】:
基本上,我使用 RestTemplate 进行了一个 post call 以获取访问令牌并获得“400 Bad Request”。
通过 Postman 进行的相同调用可以使用完全相同的参数成功。
private String getTokenString(@NonNull String code)
{
String tokenUrl = AZURE_BASE_URL + tenantId + "/oauth2/token";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
headers.set("Authorization", "Bearer "+code);
JSONObject request = new JSONObject();
request.put("grant_type", "authorization_code");
request.put("client_id", clientId);
request.put("code", code);
request.put("client_secret", password);
request.put("redirect_uri", redirectUrl);
HttpEntity<String> entity = new HttpEntity<>(request.toString(), headers);
RestTemplate restTemplate = new RestTemplate();
try {
ResponseEntity<String> response = restTemplate.exchange(tokenUrl, HttpMethod.POST, entity, String.class);
return response.getBody();
} catch (Exception e)
{
e.printStackTrace();
}
return null;
}`
在多次尝试修改后,我无法弄清楚这段代码有什么问题。 我的堆栈跟踪是这样的。
org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request
at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:79)
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:122)
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:102)
at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:778)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:736)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:670)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:579)
at com.xupes.stockmanagement.azure.controller.AzureController.getTokenString(AzureController.java:68)
at com.xupes.stockmanagement.azure.controller.AzureController.userInfo(AzureController.java:45)
at com.xupes.stockmanagement.azure.controller.AzureController$$FastClassBySpringCGLIB$$c7397a7.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:684)
at com.xupes.stockmanagement.azure.controller.AzureController$$EnhancerBySpringCGLIB$$1e02dbbe.userInfo(<generated>)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1039)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
【问题讨论】:
标签: java rest spring-boot oauth-2.0 azure-active-directory