@FeignClient(name = “kakaoClient”, configuration = KakaoFeignConfiguration.class)
public interface KakaoClient {
@PostMapping
KakaoInfo getInfo(URI baseUrl, @RequestHeader("Authorization") String accessToken);
@PostMapping
KakaoToken getToken(URI baseUrl, @RequestParam("client_id") String restApiKey,
@RequestParam("redirect_uri") String redirectUrl,
@RequestParam("code") String code,
@RequestParam("grant_type") String grantType);
}
getToken 메서드는 accessToken같은 Token값은 잘 들어옵니다.
public KakaoInfo getInfo(final String code) {
final KakaoToken token = getToken(code);
log.debug(“token = {}”, token);
try {
return client.getInfo(new URI(kakaoUserApiUrl), token.getTokenType() + " " + token.getAccessToken());
} catch (Exception e) {
log.error(“something error…”, e);
return KakaoInfo.fail();
}
}
token값을 이용하여 kakaoService.getInfo(code)를 실행시키면 유저 정보가 아닌 에러와 null값이 들어옵니다.
에러 정보 : [400 Bad Request] during [POST] to [https://kauth.kakao.com/oauth/token?client_id=6256a
“error_code”:“KOE320”}]
유저정보를 요청하는 부분인
return client.getInfo(new URI(kakaoUserApiUrl), token.getTokenType() + " " + token.getAccessToken()); 코드와 매개변수는 문제없이 잘 들어갑니다. 제가 놓친것이 있을까요?
안녕하세요.
접근토큰 발급은 application/x-www-form-urlencoded
형식으로 전송되어야 합니다.
답글주셔서 감사합니다
woody님께서 말씀하신 application/x-www-form-urlencoded
형식으로 코드 변경해서 실행했을때
[400 Bad Request] during [POST] 에러는 해결됐지만 여전히 유저정보가 null값으로 들어옵니다.
token = KakaoToken(tokenType=bearer, accessToken=akSUxxxxxxxxxxxxxxK-75TxMV4FSoPbdCj1zGAAAAYgnlLPa, refreshToken=bIyMLnNxxxxxxxxxxCj1zGAAAAYgnlLPZ, expiresIn=21599, refreshTokenExpiresIn=5183999)
2023-05-17 11:40:36.887 DEBUG 182387 — [nio-8080-exec-7] o.s.w.c.HttpMessageConverterExtractor : Reading to [com.xxxx.login.dto.KakaoInfo]
2023-05-17 11:40:36.889 DEBUG 182387 — [nio-8080-exec-7] c.b.m.login.service.KakaoService : getInfo
2023-05-17 11:40:36.898 DEBUG 182387 — [nio-8080-exec-7] o.s.w.c.HttpMessageConverterExtractor : Reading to [com.xxxx.login.dto.KakaoInfo]
2023-05-17 11:40:36.899 DEBUG 182387 — [nio-8080-exec-7] c.b.m.login.controller.KakaoController : test = KakaoInfo(kakaoAccount=null)
아래는 feign client 인터페이스와, getInfo 구현 코드입니다.
@FeignClient(name = "kakaoClient", configuration = KakaoFeignConfiguration.class)
public interface KakaoClient {
@PostMapping(consumes = "application/x-www-form-urlencoded", produces = "application/json")
KakaoInfo getInfo(URI baseUrl, @RequestHeader("Authorization") String accessToken);
@PostMapping
KakaoToken getToken(URI baseUrl, @RequestParam("client_id") String restApiKey,
@RequestParam("redirect_uri") String redirectUrl,
@RequestParam("code") String code,
@RequestParam("grant_type") String grantType);
}
public KakaoInfo getInfo(final String code) {
final KakaoToken token = getToken(code);
log.debug("token = {}", token);
try {
log.debug("getInfo", client.getInfo(new URI(kakaoUserApiUrl), token.getTokenType() + " " + token.getAccessToken()));
return client.getInfo(new URI(kakaoUserApiUrl), token.getTokenType() + " " + token.getAccessToken());
} catch (Exception e) {
log.error("something error..", e);
return KakaoInfo.fail();
}
}
getInfo메서드의 return client.getInfo(new URI(kakaoUserApiUrl), token.getTokenType() + " " + token.getAccessToken()); 부분에 매개변수는 정상적인 값이 들어갑니다.
카카오 developer에서 사이트 도메인 또한 정확히 작성했는데 null값이 돌아오는 이유를 모르겠습니다.
제가 실수 하고 있는점을 알려주시면 감사하겠습니다.