[Spring Boot] 카카오 OAuth2.0 구현하기

smlee·2022년 6월 16일
4

Back-end

목록 보기
14/26
post-custom-banner

카카오 공식 문서에 카카오 oAuth에 대한 설명이 친절하게 적혀있다.

이 OAuth를 Spring boot로 구현해보려고 한다. 물론 카카오 REST API 공식 문서에 친절하게 적혀있긴 하지만, 나중에 복습할 수 있도록 정리해두려고 한다.

1. 카카오 개발자 페이지에서 앱 등록

(1) 애플리케이션 추가하기

카카오 개발자 페이지에서 애플리케이션 추가하기를 눌러 내 프로젝트를 만든다.

애플리케이션 명과 사업자명을 입력하면 위와 같이 프로젝트가 생성된다.

우리가 사용할 키는 REST API 키이다.

(2) 카카오 로그인 활성화

거기에, 카카오 로그인을 활성화하기 위하여 좌측 탭의 카카오 로그인에서 카카오 로그인을 활성화한다.

활성화 설정 상태를 누르면 ON 상태가 된다.

(3) Redirect URI 등록

그리고 아래 쪽의 Redirect URI를 등록해준다. Redirect URI는 사용자가 카카오 로그인을 수행했을 때 발급되는 코드를 반환하는 페이지라고 생각하면 된다.

로컬 환경과 내 도메인 두 가지 환경에서 사용할 것이므로 두 개의 주소를 등록해준다.

카카오 로그인 탭 아래의 동의 항목 탭에서 카카오 로그인 시 가져올 정보들을 설정한다.

(4) 잘 적용되는지 확인하기

사용자가 내 애플리케이션에서 카카오로 로그인하기를 누르면 다음과 같은 url로 접속해서 사용자가 로그인하도록 하면 된다.

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

여기서 REST_API_KEY는 애플리케이션을 만들자마자 나왔던 API 키를 입력하면 되고, REDIRECT_URI에는 설정해두었던 URI가 들어가게 된다.

내가 발급 받은 REST API KEYREDIRECT URI를 넣어보니 내가 설정한 애플리케이션 명과 배포자명이 나타나며 제대로 적용되는 것을 확인할 수 있었다.

그리고 전체 동의하기를 누르면 redirect uri로 제대로 이동된다.

이동 후에는 Query String으로 code를 받아올 수 있는 것을 확인할 수 있을 것이다.

2. 스프링부트에 적용하기

(1) 인가 코드 받아오기

나는 /users/logIn/oauth/kakao라는 path variable로 redirect uri를 설정했다.
따라서 UserController 파일에 다음과 같은 코드를 작성해주었다.

@ResponseBody
    @GetMapping("/kakao")
    public BaseResponse<String> kakaoCallback(@RequestParam String code){
        String response = "성공적으로 카카오 로그인 API 코드를 불러왔습니다.";
        System.out.println(code);
        return  new BaseResponse<String>(response);
    }

쿼리스트링으로 들어오는 code를 콘솔에 출력하도록 하는 함수이다.

GET 요청을 보내보면

콘솔에서 잘 받아오는 것을 확인할 수 있다.
위와 같은 방식으로 인가 코드를 받아올 수 있는 것을 확인했으니, 이제 이 코드를 사용해서 Access Token을 요청해서 가져올 것이다.

(2) Access Token 가져오기

POST로 Access Token을 요청해서 받아오는데, 결과를 JSON 형식으로 받아오므로 JSON Parser를 사용할 것이다.

build.gradle파일에서

    compile group: 'org.json', name: 'json', version: '20160810'

위 코드를 입력하여 dependencies에 추가한다.

그 후 본격적인 REST API 작업을 위해 공식 레퍼런스를 보면

공식 레퍼런스에서 GET 요청을 통해 인가 코드를 가져오는 것을 확인할 수 있으므로

GET 요청 코드를 작성한다.
그 후 토큰을 받아와서 로그인 처리를 해야한다.

토큰을 받아오는 작업은 POST 요청으로 가져오는 것을 확인할 수 있다.
이를 처리해주도록 한다.

RestTemplate을 통해 POST 요청을 보낸다. 그 후 access token을 받아오는 작업을 처리한다.

코드는 복잡해보이지만 생각보다 간단하다.

공식 레퍼런스를 보면 HeaderContent-type : application/x-www-form-urlencoded;charset=utf-8이므로 이를 추가해준다.

거기에 Parameter들 중에서 꼭 필요한 것들을 MultiValueMap에 넣어 넘겨주는 형태로 코드가 작성된 것이다.

그리고 아까 설치한 JSON Parser를 통해 응답을 받아오는 원리이다.


그래서 위 코드를 실행해보면 위와 같이 된다. 성공적으로 jwt가 발급되고 로그인에 성공된 것을 알 수 있다.


💻 Reference

  1. 카카오 로그인 REST API 공식 레퍼런스
  2. [Kakao Login API] 카카오 로그인 API 서비스 구현 (Spring Boot 환경에서 카카오 로그인 API RESTful방식으로 연동하기 -3장)
post-custom-banner

0개의 댓글