我正在使用Spring Security OAuth。 Spring能够成功地为访问令牌交换身份验证。
但是,为了随后访问受保护的资源,Twitch还要求在访问受保护资源时传递client_id,而Spring似乎只传入access_token。
我尝试更新模板,但是这似乎没有将它们作为额外的URI参数传递:
OAuth2RestTemplate template = new OAuth2RestTemplate(client.getClient(), oauth2ClientContext());
HashMap map = new HashMap();
map.put("client_id", "MY_CLIENT_SECRET");
template.setDefaultUriVariables(map);
filter.setRestTemplate(template);
同样,这似乎也不起作用。
如何告诉Spring的OAuth2也传递client_id?
答案 0 :(得分:0)
我通过创建自定义UserInfoTokenService并覆盖getMap(String path,String accessToken)解决了这个问题:
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
DefaultOAuth2AccessToken token = new DefaultOAuth2AccessToken(
accessToken);
headers.add("Authorization", String.format("%s %s", "OAuth", accessToken));
logger.info(String.format("%s %s", "OAuth", accessToken));
headers.add("Content-Type", "application/json");
HttpEntity he = new HttpEntity(null, headers);
ResponseEntity<Map> exchange = restTemplate.exchange(path, HttpMethod.GET, he,
Map.class);
return exchange.getBody();