728x90
반응형
서론
1편에 이어 2편도 제작하려 합니다. 1편은 하단 링크를 참고하시면 됩니다.
저번 시간에는 인증 코드를 요청하고 카카오 서버를 거쳐 인증코드를 가져오는 첫번째 단계까지 확인했습니다.
이번에는 인증코드로 토큰 요청을 하고, 토큰을 받아오는 과정까지 진행해보려 합니다.
본론
access_token을 가져오기 위해서는 다음과 같이 4개의 조건이 필요합니다. grant_type은 string으로 고정되어있으니 해결했고, client_id랑 redirect_url은 이전에 설정해놓은거 그대로 가져오면 되겠네요.
마지막으로 코드도 파라메타로 넘겨 받았으니 짱 쉽게 넣으면 됩니다.
public JsonNode getKakaoAccessToken(String code) {
final String RequestUrl = "https://kauth.kakao.com/oauth/token"; // Host
final List<NameValuePair> postParams = new ArrayList<NameValuePair>();
postParams.add(new BasicNameValuePair("grant_type", "authorization_code"));
postParams.add(new BasicNameValuePair("client_id", "REST API KEY!!!")); // REST API KEY
postParams.add(new BasicNameValuePair("redirect_uri", "http://localhost:8080/kakao/callback")); // 리다이렉트 URI
postParams.add(new BasicNameValuePair("code", code)); // 로그인 과정중 얻은 code 값
final HttpClient client = HttpClientBuilder.create().build();
final HttpPost post = new HttpPost(RequestUrl);
JsonNode returnNode = null;
try {
post.setEntity(new UrlEncodedFormEntity(postParams));
final HttpResponse response = client.execute(post);
final int responseCode = response.getStatusLine().getStatusCode();
System.out.println("\nSending 'POST' request to URL : " + RequestUrl);
System.out.println("Post parameters : " + postParams);
System.out.println("Response Code : " + responseCode);
// JSON 형태 반환값 처리
ObjectMapper mapper = new ObjectMapper();
returnNode = mapper.readTree(response.getEntity().getContent());
} catch (IOException e) {
e.printStackTrace();
}
return returnNode;
}
이분 코드를 분석하면서 NameValuePair 객체또한 알게 되었네요. 다시한번 감사드립니다. 귀찮으신 분들을 위해 공부한거 조금 정리해드립니다.
BasicNameValuePair
BasicNameValuePair 클래스의 목적은 1개의 데이터를 전달하기 위한 것이므로 Name/Value값 하나만 저장하는 구조로 설계되어 있다.
리스트에 담아서 http통신하기 위한 목적으로 만들어진 객체 같습니다.
try - catch에 담아서 통신한 후 가져온 객체를 JsonNode에 담아서 리턴하면 끝입니다!
@Controller
@RequestMapping("/kakao")
public class KakaoController {
@GetMapping(value="/oauth")
public String kakaoConnect() {
StringBuffer url = new StringBuffer();
url.append("https://kauth.kakao.com/oauth/authorize?");
url.append("client_id=" + "받은 Client_id");
url.append("&redirect_uri=http://localhost:8080/kakao/callback");
url.append("&response_type=code");
return "redirect:" + url.toString();
}
@RequestMapping(value="/callback",produces="application/json",method= {RequestMethod.GET, RequestMethod.POST})
public String kakaoLogin(@RequestParam("code")String code, RedirectAttributes ra, HttpSession session, HttpServletResponse response, Model model)throws IOException {
System.out.println("kakao code:"+code);
JsonNode access_token = getKakaoAccessToken(code);
}
public JsonNode getKakaoAccessToken(String code) {
final String RequestUrl = "https://kauth.kakao.com/oauth/token"; // Host
final List<NameValuePair> postParams = new ArrayList<NameValuePair>();
postParams.add(new BasicNameValuePair("grant_type", "authorization_code"));
postParams.add(new BasicNameValuePair("client_id", "...")); // REST API KEY
postParams.add(new BasicNameValuePair("redirect_uri", "http://localhost:8080/kakao/callback")); // 리다이렉트 URI
postParams.add(new BasicNameValuePair("code", code)); // 로그인 과정중 얻은 code 값
final HttpClient client = HttpClientBuilder.create().build();
final HttpPost post = new HttpPost(RequestUrl);
JsonNode returnNode = null;
try {
post.setEntity(new UrlEncodedFormEntity(postParams));
final HttpResponse response = client.execute(post);
final int responseCode = response.getStatusLine().getStatusCode();
System.out.println("\nSending 'POST' request to URL : " + RequestUrl);
System.out.println("Post parameters : " + postParams);
System.out.println("Response Code : " + responseCode);
// JSON 형태 반환값 처리
ObjectMapper mapper = new ObjectMapper();
returnNode = mapper.readTree(response.getEntity().getContent());
} catch (IOException e) {
e.printStackTrace();
}
return returnNode;
}
}
서버 실행 후 클릭해봤을 때 response 200 코드가 떳을 때 정말 기뻣던 기억이 있네요,, 다시한번 감사드립니다.
이로써 인증토큰 요청과 인증토큰을 전달받는 과정까지 진행해보았습니다.
다음에는 이 인증받은 정보를 바탕으로 사용자 정보요청하는 과정을 포스팅해보겠습니다.
728x90
반응형
'Dev > SpringBoot' 카테고리의 다른 글
19. [SpringBoot] 버전 걱정 없는 SSO 구현 번역해보기 - 1 (0) | 2020.09.21 |
---|---|
18. [SpringBoot] 환경설정별로 다르게 실행해보자 (0) | 2020.09.09 |
16. [SpringBoot] 스프링부트 카카오 로그인하기 구현(따라치기만하면됨)(1) (0) | 2020.07.23 |
15. [Spring Boot] URL별 접근권한 DB에서 가져와서 처리하기(2) (3) | 2020.06.18 |
14. [Spring Boot] URL별 접근권한 DB에서 가져와서 처리하기(1) (3) | 2020.06.17 |