본문 바로가기

Backend Study/Server

카카오 로그인 스프링부트 구현하기 (소셜 로그인)

참고) 

Kakao Developers 문서

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

카카오 로그인은 카카오계정으로 다양한 서비스에 로그인할 수 있도록 하는 OAuth 2.0기반의 소셜 로그인 서비스이다. 

카카오 로그인 사용 시, 서비스는 ID 및 비밀번호를 입력받고 검증하는 과정을 직접 구현하지 않고도 사용자에 대한 인증과 인가를 간편하고 안전하게 처리할 수 있다.

 

 

 

아래는 카카오에서 제공해주는 기능이다.

 

카카오 로그인은 카카오 계정의 사용자 자격 정보로 인가 코드를 받아오고, 인가 코드로 액세스 토큰과 리프레스 토큰을 얻는 두 단계로 구성되어있다.

 

백엔드 부분 

프론트에서 저장해둔 카카오의 사용자 토큰을 이용해서 카카오에 사용자 정보를 요청해야한다. (사용자 토큰을 받는 과정까지는 대부분 클라이언트 측에서 구현을 해준다. )

 

사용자 액세스 토큰 또는 어드민 키와 사용자 ID를 헤더에 담아 GET/POST로 요청한다. 사용자 정보 요청 성공 시 응답 바디는 JSON 객체로 사용자 정보들을 포함한다.

스프링 부트로 구현한 코드

(body값으로 클라측에서 Access Token을 받은 뒤 헤더에 담아서 카카오 서버측에 요청한다.)

 

 RestTemplate rt2 = new RestTemplate();

        HttpHeaders headers2 = new HttpHeaders();
        headers2.add("Authorization", "Bearer "+ postUserReq.getAccessToken());
        headers2.add("Content-type", "application/x-www-form-urlencoded;charset=utf-8");
        HttpEntity<MultiValueMap<String, String>> kakaoProfileRequest2 =
                new HttpEntity<>(headers2);
        ResponseEntity<String> response2 = rt2.exchange(
                "https://kapi.kakao.com/v2/user/me",
                HttpMethod.POST,
                kakaoProfileRequest2,
                String.class
        );

        ObjectMapper objectMapper2 = new ObjectMapper();
        KakaoProfile kakaoProfile = null;

        objectMapper2.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);


        try {

            kakaoProfile = objectMapper2.readValue(response2.getBody(), KakaoProfile.class);

        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

 

kakaoProfile 객체

 

public class KakaoProfile {
    public String id;
    public String connected_at;
    public Properties properties;
    public KakaoAccount kakao_account;

    @Data
    public class Properties {
        public String nickname;
        public String profile_image;
        public String thumbnail_image;
    }

    @Data
    public class KakaoAccount {
        public Boolean profile_needs_agreement;
        public Profile profile;
        public Boolean has_email;
        public Boolean email_needs_agreement;
        public Boolean is_email_valid;
        public Boolean is_email_verified;
        public String email;
        public Boolean has_birthday;
        public Boolean birthday_needs_agreement;
        public String birthday;
        public String birthday_type;
        public boolean has_gender;
        public String gender;
        public boolean gender_needs_agreement;
        @Data
        public class Profile {
            public String nickname;
            public String thumbnail_image_url;
            public String profile_image_url;
            public Boolean is_default_image;

        }

    }
}

 

성공적으로 진행된다면, 사용자의 정보를 Kakao Proflie 객체로 받을 수 있다. 이후에는 사용자의 정보로 우리 서비스의 회원가입, 로그인 정책대로 구현해주면 된다! 

'Backend Study > Server' 카테고리의 다른 글

쿠키, 세션, JWT  (0) 2022.08.23
From 절 서브 쿼리 (=인라인뷰 서브 쿼리)  (0) 2022.08.01
OAuth 2.0  (0) 2022.07.30
쿼리문(Join, Group by, Union, Having, 변수)  (0) 2022.07.24
리눅스 사용시 root?  (0) 2021.08.03