본문 바로가기
목차
Spring/Spring boot

스프링부트 강좌 64강(블로그 프로젝트) - 카카오 로그인 엑세스토큰 받기

by 지각생 2022. 1. 26.
728x90

출처:

https://www.youtube.com/watch?v=NwQ_55l0Za4&list=PL93mKxaRDidECgjOBjPgI3Dyo8ka6Ilqm&index=66 

 


코드를 받을건데

받는 방식이 이렇게 GET 방식이다.

GET

https://kauth.kakao.com/oauth/authorize?client_id={REST_API_KEY}&redirect_uri={REDIRECT_URI}&response_type=code

Host:

kauth.kakao.com

 

위 이미지는 강의화면인데 내 글 작성 시점으로 해당 

다운로드 안내 위치가 다른 곳에 있다.(아래 이미지 참고)

[JavaScript]-[리소스 다운로드]

 

그전에 URL위치 잘못된거 수정좀

http://localhost:8080 -> http://localhost:8000

로그인    : 로그인 화면탭,

로그아웃 : 고급탭,

도메인    : 플랫폼 탭에서 수정완료

[축약] - [Middle] - [다운로드(.png)]

다운받은거 이렇게 붙여넣기.

{app_key} 부분에는 클라이언트 키 붙여 넣고

{redirect_uri}에는 로그인 주소 붙여넣어주기

 

이런식의 주소가 완성된다.

여기 붙여넣기

이런식으로 뜨고

응답받은 주소는 위와 같고

이렇게 되면 정상적으로 로그인 된 것임.

 

왜 404 뜨냐면 해당 Controller 안만들어서 그럼

만들어보자.

 

인증완료됨

액세스 토큰 받을거임

 

내 개인정보 응답받기 위해 토큰 필요함

47,48,49,50행 두번째 인자값들 같은 경우는 변수화 해놓고 하는게 사실 좋다.

package com.cosblog.controller;

import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.stereotype.Controller;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.client.RestTemplate;

import com.cosblog.config.auth.PrincipalDetail;


//인증이 안된 사용자들이 출입할 수 있는 경로를 /auth만 허용할 것임
//그냥 주소가 /이면 index.jsp 허용
//static이하에 있는 /js/**, /css/**, /image/**

@Controller
public class UserController {

	@GetMapping("/auth/joinForm")
	public String joinForm() {
		return "user/joinForm";
	}
	
	@GetMapping("/auth/loginForm")
	public String loginForm() {
		return "user/loginForm";
	}
	
	@GetMapping("/auth/kakao/callback")
	public @ResponseBody String kakaoCallback(String code) { //Data를 리턴해주는 컨트롤러 함수
		
		//POST 방식으로 key=value 데이터를 요청(카카오쪽으로)
		//Retrofit2
		//OkHttp
		//RestTemplate
		
		RestTemplate rt = new RestTemplate();
		
		//HttpHeader 오브젝트 생성
		HttpHeaders headers = new HttpHeaders();
		headers.add("Content-type","application/x-www-form-urlencoded;charset=utf-8");
		
		//HttpBody 오브젝트 생성
		MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
		params.add("grant_type","authorization_code");
		params.add("client_id", "84d0b808b23f632f987e7ec4dd0bbf40");
		params.add("redirect_uri", "http://localhost:8000/auth/kakao/callback");
		params.add("code", code);
		
		//HttpHeader와 HttpBody를 하나의 오브젝트에 담기
		HttpEntity<MultiValueMap<String, String>> kakaoTokenRequest =
				new HttpEntity<>(params, headers);
		
		//Http 요청하기 - Post방식으로 - 그리고  response 변수의 응답 받음.
		ResponseEntity response = rt.exchange("https://kauth.kakao.com/oauth/token",
				HttpMethod.POST,
				kakaoTokenRequest,
				String.class
				);
		
		return "카카오 토큰 요청 완료: 토큰요청에 대한 응답"+response;
	}
	
	@GetMapping("/user/updateForm")
	public String updateForm(@AuthenticationPrincipal PrincipalDetail principal) {
		return "user/updateForm";
	}
}

다 작성하고 나면 아래와 같이 뜨는데

복사해서

 

json parser 싸이트 검색하여 붙여넣기 (그냥 JSON viewer 싸이트임)

 

이 토큰으로 카카오로 로그인한 회원 개인정보 요청할 것임.

728x90

댓글