Hello

66. 카카오 로그인 엑세스토큰 받기

by 볼빵빵오춘기

loginForm.jsp

  • static > image 폴더만들고 kakao 버튼 이미지 넣기
  • loginForm.jsp에 카카오 로그인 버튼을 만든다.
더보기

href=””에 링크를 넣어줘야하는데 그 링크는 카카오 문서 > 카카오 로그인 > 인증 코드 받기 에서 확인가능하다.

<a href="https://kauth.kakao.com/oauth/authorize?client_id=발급받은 클라이언트ID를 넣어주세요.&redirect_uri=http://localhost:8080/auth/kakao/callback&response_type=code">
    <img style="height="38px"" src="/image/kakao_login_button.png">
</a>

 

UserController 

  • 위의 인증된 코드를 통해 액세스토큰을 부여받을 것이다.
  • 어떻게 전달을 받아야하는가?
    • Post 방식으로 key = value 데이터를 카카오 쪽으로 요청을 해야한다.
    • Post방식이므로 a링크로 전달은 못한다.
    • 이때 필요한 라이브러리가 RestTemplate 이다. 이것을 쓰면 Http 요청을 편하게 할 수있다.
    • 예전에는 HttpsURLConnection을 통해 사용했다. (Retrofit2,OkHttp 라이브러리도 있다.)
    • 현재는 params.add("grant_type","authorization_code"); 해서 값을 직접적으로 넣고 있지만 나중에는 변수화해서 값을 넣는것이 좋다.
더보기

Rest API 문서를 읽어보고 무엇을 인자로 보내야하는지 확인한다.

Post 방식임으로 http body에 데이터를 전달해야 한다.

(위에 보면 grant_type, client_id, redirect_uri, code 4가지를 넣어야한다.- client_secret는 필수가 아니므로 제외)

MIME = application/x-ww-form-urlencoded;charset=utf-8

https://kauth.kakao.com/oauth/token

  • grant_type = autorization_code
  • client_id = 내가 발급받은 client_id
  • redirect_uri = http://localhost:8080/auth/kakao/callback
  • code = 동적이므로 현재 알수없다.

응답받은 코드를 넣으면된다.

client_secret 필수는 아니므로 제외한다.

@GetMapping("/auth/kakao/callback")
public String kakaoCallback(String code){ // @ResponseBody => Data를 리턴해주는 컨트롤러 함수

    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","a32fc77e17469c5118302c27b8e29ee2");
    params.add("redirect_uri","http://localhost:8080/auth/kakao/callback");
    params.add("code",code);

    return "카카오 인증 완료 : 코드값 = "+response;

}

 

UserController 

  • HttpEntity에 담는 이유는 exchange()가 HrrpEntity를 받기때문이다.
  • return 을 response으로 하여 확인해본다.
// HttpHeader 와 HttpBody를 하나의 오브젝트에 담기
HttpEntity<MultiValueMap<String,String>> kakaoTokenRequest =
      new HttpEntity<>(params,headers);

// Http 요청하기 - Post방식으로 - 그리고 response 변수의 응답 받음
ResponseEntity<String> response = rt.exchange(
      "https://kauth.kakao.com/oauth/token", // 토큰 발급 주소 넣기
      HttpMethod.POST, // Post방식
      kakaoTokenRequest, // 전달 인자들(데이터)
      String.class // 응답을 받을 타입
);
return "카카오 토큰 요청 완료 : 토큰 요청에 대한 응답 : " + response;

 

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기