본문 바로가기

FrameWork/Spring Boot

SpringBoot - KAKAO AccessToken 발급 받기 (자세한 설명)

KAKAO API 이용하기

이번 포스팅은 KAKAO API를 이용해 REST API를 개발하기 위해, AccessToken을 발급 받는 과정에 대해 알아보도록 하겠습니다.

 

 

Oauth2 인증과정

https://galid1.tistory.com/106

우선 Oauth에 대해 잘 모르신다면 위 링크를 참고하여 Oauth개념을 먼저 숙지하신 후 진행하시는 것을 추천드립니다.

 

 

 

 

1. 과정 요약

과정에대해 대략적인 설명을 먼저 드린 후 실습을 하는것이 진행하시는데 도움이 될것 같아 먼저 과정에 대해 설명드리겠습니다.

 

1. KAKAO API 사용을 위한 준비

우선 첫째로, KAKAO API 사용을 위해, KAKAO Developers에 가입을 한 뒤, 우리가 사용할 App을 등록해야 합니다. 악의적인 다른 앱들이 우리 앱인것처럼 행사하여, 정보를 오남용하는 것을 막기 위해, 우리 Application이 KAKAO API 서비스에 회원가입 하는 과정으로 이해하셔도 됩니다.

 

2. 로그인 버튼 생성 (사용자가 KAKAO에 로그인하도록 하는)

우리는 KAKAO에 가입된 사용자들의 정보를 이용하는 것이므로, 우리가 만든 로그인 버튼을 통해, 사용자가 KAKAO에 로그인한 뒤 우리에게 AuthorizationToken(Access Token을 얻기위한 토큰)을 전달해 줄 수 있도록 해야합니다. (이 토큰은 Redirect를 통해 Back_end로 전달됩니다.)

 

3. Backend로 전달된 Authorization Token을 이용해 AccessToken 발급

마지막으로 BackEnd에서는 전달받은 Authorization Token을 이용해 Access Token을 발급 받습니다.

 

요약

3자간의 인증 과정이므로 약간은 복잡할 수 있습니다. 정리하자면 아래와 같습니다.

  1. User가 App(Web)에 접속합니다.

  2. 우리는 KAKAO 로그인 창으로 Redirection되는 로그인 버튼을 User에게 보여줍니다.

    (KAKAO에 존재하는 정보의 주인이 우선 KAKAO에 인증을 하는 과정입니다.)

  3. User가 로그인에 성공하면 우리가 미리 입력해둔 Redirect URL(Back_end)로 사용자가 Redirection되면서, KAKAO에서 발급해준 Authorization Token을 우리에게 전달해줍니다.

    ( KAKAO에게 User가 자신의 정보 이용을 우리에게 허락했음을 알리는 과정입니다. )

  4. Back_End에서 KAKAO에 Authorization Token을 전송해 최종적으로 정보를 이용할 수 있는 Access Token을 발급.

    (Authorization Token을 마지막으로 KAKAO에서 검증하는 과정)

 

 

 

아래 그림들은 이해를 돕기위해 제가 직접 그려본 그림입니다. 도움이 될 수 있으면 좋을 것같습니다.

< 과정1 >

 

 

< 과정2 >

위 8번 과정에서 App Secret이 빠졌는데, KAKAO의 경우 별도의 설정을 하지 않은 경우 App Secret을 넣지 않는 것이 기본 설정입니다.

 

 

< 과정3 >

 

 

2. 실습

2.1 KAKAO API 사용을 위한 준비

KAKAO Doc

https://developers.kakao.com/docs/restapi/getting-started

우선 위 링크로 이동합니다.

 

그 후 REST API 개발가이드 탭의 시작하기탭을 클릭한 뒤, 그림에 보이는 3가지 구성을 먼저 진행합니다. 우리는 Web APP을 이용해 실습을 진행할 것입니다.

 

 

 

2.2 로그인 버튼 생성

위 그림은 전체적인 프로젝트 구조입니다.

 

main.html

main.html을 열어 위와 같이 코드를 작성합니다. 천천히 설명드리겠습니다.

 

Html

페이지에 한개의 Button을 그립니다.

 

Javascript

Button에 리스너를 답니다. 리스너는, KAKAO Login 페이지로 리다이렉션 되는 코드를 포함하며, 리다이렉션시 파라미터로, client_id, redirect_uri, response_type을 전달합니다.

 

client_idKAKAO Developers의 내 애플리케이션 페이지의 설정 - 일반 탭의 Javascript 키를 입력해주시면 됩니다.

 

redirect_uri는 사용자가 로그인 후, KAKAO에서 제공하는 Authorization Code를 받을 서버의 URL을 입력해주면 됩니다. 주의할 점은 KAKAO DEVELOPERS 페이지의 설정 - 사용자 관리 탭의 로그인 Rdirect URI와 일치해야 합니다.

 

 

 

2.3 Controller 작성

 

KakaoController

main()

우선 main()메소드의 경우, KAKAO 로그인 버튼이 존재하는 페이지를 보여주는 Handler 입니다.

 

getAuthCode()

getAuthCode() 의 경우, @RequestParam("code")어노테이션을 이용해, 사용자가 KAKAO에 로그인 후, Redirect되면서 건내주는 Authorization CodeauthorizationCode 변수에 담아줍니다. 그 후, GetAccessTokenService를 이용해 AccessToken을 받아옵니다.

 

 

 

2.4 GetAccessTokenService 작성

GetAccessTokenService에서는 MyOkhttpClient의 getAccessToken()을 호출하며, 인자로 사용자로부터 얻어낸 AuthorizationCode를 전달합니다.

 

 

 

2.5 AccessToken 얻기 (MyOkHttpClient 작성)

마지막으로 AccessToken을 얻어오기 위해서는, BackEnd에서 KAKAO의 지정된 URL로 요청을 보내야합니다. 따라서 HTTP Client 라이브러리를 이용해야 합니다.

 

OKHttp라이브러리를 추가합니다.

 

Access Token을 받기 위한 요청은 위의 링크를 참고하여 작성하면 되지만, 제가 작성한 코드를 보여드리며 조금 설명을 보태겠습니다.

 

잘 짜여진 코드는 절대 아닙니다. 접근 제어자가 public인 getAccessToken()만을 집중해서 보시면 됩니다. OkHttpClient를 생성한 뒤, AuthorizationCode, redirect uri, Client Id를 파라미터로 하는 URL을 만들어 해당 URL을 이용해 Request객체를 생성합니다.

 

마지막으로 요청의 결과로 전달받는 Access Token을 콘솔에 출력합니다.

 



3. 결과


성공입니다.