如何将client_id添加到Spring Boot OAuth Security for Twitch执行的请求中

时间:2017-05-14 19:04:53

标签: spring spring-security oauth

我正在使用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?

1 个答案:

答案 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();