문의 시, 사용하시는 개발환경과 디벨로퍼스 앱ID를 알려주세요.
개발환경은
스프링부트 에서 feign 라이브러리를 사용해 구현중이고
앱 ID 는 933473 입니다.
@FeignClient(name = "kakaoLoginFeignClient",
url = "https://kauth.kakao.com",
configuration = KakaoFeignConfiguration.class)
@Component
//Login 코드를 가지고 Token 을 요청하는 Feign
public interface KakaoLoginFeignClient {
@PostMapping(
"/oauth/token?grant_type=authorization_code")
AuthRes.KakaoTokenResponse kakaoAuth(
@RequestParam("client_id") String clientId,
@RequestParam("redirect_uri") String redirectUri,
@RequestParam("client_secret") String client_secret,
@RequestParam("code") String code
);
}
feign 요청 부분 코드입니다. 요청은 가나 accessToken 이 null 값으로 돌아옵니다.
public String testKakaoToken(String code){
String reqURL = "https://kauth.kakao.com/oauth/token";
String access_Token = null;
String refresh_Token;
try {
URL url = new URL(reqURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//POST 요청을 위해 기본값이 false인 setDoOutput을 true로
conn.setRequestMethod("POST");
conn.setDoOutput(true);
//POST 요청에 필요로 요구하는 파라미터 스트림을 통해 전송
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
String sb = "grant_type=authorization_code" +
"&client_id=" + oauthProperties.getKakaoClientId() + // TODO REST_API_KEY 입력
"&redirect_uri=http://localhost:9000/auth/kakao" + // TODO 인가코드 받은 redirect_uri 입력
"&code=" + code +
"&client_secret="+oauthProperties.getKakaoClientSecret();
bw.write(sb);
bw.flush();
//결과 코드가 200이라면 성공
int responseCode = conn.getResponseCode();
System.out.println("responseCode : " + responseCode);
//요청을 통해 얻은 JSON타입의 Response 메세지 읽어오기
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
StringBuilder result = new StringBuilder();
while ((line = br.readLine()) != null) {
result.append(line);
}
System.out.println("response body : " + result);
//Gson 라이브러리에 포함된 클래스로 JSON파싱 객체 생성
JsonParser parser = new JsonParser();
JsonElement element = JsonParser.parseString(result.toString());
access_Token = element.getAsJsonObject().get("access_token").getAsString();
refresh_Token = element.getAsJsonObject().get("refresh_token").getAsString();
System.out.println("access_token : " + access_Token);
System.out.println("refresh_token : " + refresh_Token);
br.close();
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
return access_Token;
}
해당 코드로 요청 시에는 accessToken 이 정상적으로 들어옵니다.