navis

카카오 로그인 API 연동 (Spring boot) 본문

API

카카오 로그인 API 연동 (Spring boot)

menstua 2024. 8. 27. 09:02
728x90

Kakao Developers REST API 설정

 

Kakao Developers

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

developers.kakao.com

 

카카오 로그인 API를 연동하는 과정은 여러 단계로 이루어져 있으며, 이를 통해 사용자 인증을 보다 간편하게 구현할 수 있습니다. 아래는 각 단계에 대한 자세한 설명입니다.

목차

1. Kakao Developers 설정

  • 애플리케이션 생성 및 설정
  • REST API 키 및 Client Secret Code 확인

2. 개발 환경 설정

  • Spring Boot 프로젝트 생성
  • 의존성 설정 및 플랫폼 추가
  • Redirect URI 설정

3. 초기화 및 로그인 구현하기

  • 카카오 로그인 활성화
  • OAuth 토큰 발급 및 관리
  • 사용자 정보 요청 및 처리

4. 보안 설정

  • Client Secret Code 설정
  • 보안 강화 방안 및 유의사항

5. 실습 예제

  • Spring Boot에서 카카오 로그인 구현하기
  • 사용자 정보 출력 예제

6. 마무리

  • 개발 시 주의사항 및 팁
  • 추가 참고 자료 및 문서

1. Kakao Developers 설정

먼저, Kakao Developers에 접속하여 애플리케이션을 생성해야 합니다. 애플리케이션을 생성한 후, 해당 앱에서 제공하는 API들을 사용할 수 있습니다.

  • 내 애플리케이션 생성: Kakao Developers에 로그인한 후 '내 애플리케이션' 메뉴에서 새로운 애플리케이션을 생성합니다. 애플리케이션 이름과 사업자 정보 등을 입력하면 앱이 생성됩니다.
  • 앱 설정: 앱이 생성되면 '앱 설정' 메뉴에서 기본 정보, 플랫폼 정보 등을 설정할 수 있습니다. 이 단계에서 API 사용을 위한 앱 키(App Key)도 제공됩니다.

2. 개발 환경 설정

애플리케이션을 생성한 후, 사용하려는 플랫폼(웹, 모바일, 데스크탑)에 맞는 개발 환경을 설정해야 합니다. 이 단계에서는 기본적으로 다음과 같은 작업을 수행합니다.

  • 플랫폼 추가: 사용할 플랫폼을 추가합니다. 예를 들어 웹 애플리케이션의 경우, 웹 플랫폼을 선택하고 클라이언트 도메인 주소를 입력해야 합니다.

내 애플리케이션' > '앱 설정' > '플랫폼

Web 플랫폼 등록

 

  • 앱 키 복사: REST API 호출을 위해 필요한 'REST API 키'와 보안 강화를 위한 'Client Secret Code'를 복사하여 개발 환경에 설정합니다. 이 키들은 나중에 API 호출 시 필요하게 됩니다.

내 애플리케이션 > 앱 설정 > 앱키

REST API 키


3. 카카오 로그인 구현

카카오 로그인을 구현하는 과정은 비교적 간단하지만 몇 가지 중요한 설정을 해야 합니다.

  • 카카오 로그인 활성화: 카카오 로그인을 활성화합니다. 이 옵션을 활성화해야만 사용자들이 카카오 계정을 통해 로그인을 할 수 있습니다.

내 애플리케이션 > 제품 설정 > 카카오 로그인

카카오 로그인 활성화

  • Redirect URI 설정: 카카오 로그인 과정이 완료된 후, 사용자가 이동할 URL을 설정해야 합니다. 이를 위해 '카카오 로그인' 설정 화면에서 아래로 스크롤하여 Redirect URI를 입력합니다. 이 URI는 사용자가 로그인 인증을 완료한 후 리디렉션될 주소를 의미합니다.

내 애플리케이션 > 제품 설정 > 카카오 로그인

Redirect URL 설정

  • 동의 항목 설정: 카카오 로그인을 통해 사용자로부터 받을 정보를 설정합니다. '동의 항목' 메뉴에서 닉네임, 프로필 사진, 성별, 생일 등의 정보에 대해 사용자 동의를 받을 수 있습니다. 이 정보는 카카오 로그인 인증 후 응답 데이터로 제공됩니다.

내 애플리케이션 > 제품 설정 > 카카오 로그인 > 동의항목

동의항목 추가

 

4. 보안 설정

API 통신 과정에서 보안을 강화하기 위해 'Client Secret Code'를 활용할 수 있습니다. 이를 통해 액세스 토큰 발급 요청 시 추가적인 보안을 확보할 수 있습니다.

  • Client Secret Code 설정: Client Secret Code를 활성화하고, 발급된 코드를 통해 보안 설정을 완료합니다.

내 애플리케이션 > 제품 설정 > 카카오 로그인 > 보안

Client Secret Code


 

5. 실습

REST API 통신

 

이제 카카오 로그인을 통해 얻은 인증 코드를 바탕으로 REST API를 사용하여 사용자 정보를 요청할 수 있습니다.

  • 토큰 발급: 카카오 로그인 후에 얻은 인증 코드를 사용하여 액세스 토큰을 발급받습니다. 이때 REST API 키와 Redirect URI, Client Secret Code 등이 필요합니다.
  • 사용자 정보 요청: 액세스 토큰을 통해 카카오 사용자 정보 API를 호출하여, 사용자의 프로필 정보를 가져올 수 있습니다. 이 단계에서 사용자로부터 동의받은 항목들(예: 닉네임, 프로필 사진 등)이 포함된 데이터를 받게 됩니다.

Controller

@Slf4j
@RestController
@RequiredArgsConstructor
public class KakaoApiController {

    private final KakaoApiService kakaoApiService;

    // 카카오 간편 로그인
    @GetMapping("/callback-kakao")
    public ResponseEntity<String> callback(@RequestParam("code") String code) {
        try {
            // 액세스 토큰을 받고 사용자 정보를 가져오기
            KakaoUserInfoResponseDto userInfo = kakaoApiService.getAccessTokenAndUserInfo(code);

            // 사용자 정보를 이용한 추가 작업 (예: 회원가입, 로그인 처리)
            log.info("Retrieved User Info: {}", userInfo);

            return ResponseEntity.ok("User Info retrieved successfully.");
        } catch (Exception e) {
            log.error("Error occurred: ", e);
            return ResponseEntity.status(HttpStatus.UNAUTHORIZED)
                    .body("Error: Unauthorized request. Please check your credentials and try again.");
        }
    }
}

 

WebClient

 // 인증토큰 조회
    @Override
    public String getAccessToken(String code) {
        return webClient.post()
                .uri(Comm.KAKAO_TOKEN_URL)
                .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE)
                .body(BodyInserters.fromFormData("grant_type", "authorization_code")
                        .with("client_id", clientId)
                        .with("redirect_uri", redirectUri)
                        .with("code", code)
                        .with("client_secret", clientSecret))
                .retrieve()
                .bodyToMono(Map.class)
                .map(responseBody -> (String) responseBody.get("access_token"))
                .block();
    }

    // 유저 정보 조회
    @Override
    public KakaoUserInfoResponseDto getUserInfo(String accessToken) {
        return webClient.get()
                .uri(Comm.KAKAO_USER_INFO_URL)
                .header(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken)
                .retrieve()
                .bodyToMono(KakaoUserInfoResponseDto.class)
                .block();
    }
}

 

 


 

'API' 카테고리의 다른 글

구글 로그인 API 연동 (Spring boot)  (1) 2024.08.28
네이버 로그인 API 연동 (Spring boot)  (0) 2024.08.28