gpt4 book ai didi

java - 撤销 token 。 RestTemplate使用问题

转载 作者:行者123 更新时间:2023-12-02 12:42:27 26 4
gpt4 key购买 nike

我正在尝试撤销以下 Google token API ("Content-type:application/x-www-form-urlencoded",请求类型 POSThttps://accounts.google.com/o/oauth2/revoke?token={token})。

我的代码示例是:

private static final String REVOKE_URL = "https://accounts.google.com/o/oauth2/revoke";
private static final String TOKEN = "token";
@Autowired
private RestTemplate restTemplate;

public void revokeToken(TokenDetailsDto tokenDetailsDto) {
HttpHeaders headers = new HttpHeaders();
headers.add(CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE);
HttpEntity<?> entity = new HttpEntity(headers);
Map<String, String> parameters = new HashMap<>();
parameters.put(TOKEN, tokenDetailsDto.getRefreshToken());
LOGGER.info("used parameters:\n\turl={},\n\tentity={},\n\turiParameters={}", REVOKE_URL, entity, uriParameters);
restTemplate.exchange(REVOKE_URL, HttpMethod.GET, entity, Void.class, parameters);
}

结果异常:

17:30:54,323 INFO  # com.nextiva.calendar.client.google.GoogleRevokeAccessService.revokeToken used parameters:
url=https://accounts.google.com/o/oauth2/revoke,
entity=<{Content-Type=[application/x-www-form-urlencoded]}>,
uriParameters={token=1/mzMH8VPrltarCo3LOHU_tBWi4qK5e20uIM0R_Al9T34}
17:31:20,718 ERROR # com.nextiva.calendar.web.error.handling.BaseExceptionHandler.exception 400 Bad Request
org.springframework.web.client.HttpClientErrorException: 400 Bad Request
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:63)
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:700)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:653)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:621)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:540)

我尝试使用休息客户端来处理请求,就像文档中那样,这是可以的(使用休息客户端,我尝试使用具有指定内容类型的 POST 请求)。

如果我使用,则会出现相同的错误结果

restTemplate.postForEntity(REVOKE_URL, entity, Void.class, uriParameters);
<小时/>

所以问题是在restTemplate中使用(我的spring部分)。有什么想法吗?我在这里做错了什么?

最佳答案

解决方案是:

    HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE);
HttpEntity<?> entity = new HttpEntity(headers);
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(REVOKE_URL)
.queryParam("token", tokenDetailsDto.getRefreshToken());
LOGGER.info("used parameters:\n\turl={},\n\tentity={},\n\turiParameters={}", REVOKE_URL, entity);
restTemplate.postForObject(builder.build().encode().toUri(), entity, Void.class);

小解释:服务期望urlParameters,但是parameters不是urlParameters,它的请求参数。所以我使用 UriComponentsBuilder 来构建正确的请求。

关于java - 撤销 token 。 RestTemplate使用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44888156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com