spring/spring security

[Spring Security] Oauth 2.0 카카오 소셜 로그인 구현하기 1. (소셜 로그인 흐름 확인하기)

대기업 가고 싶은 공돌이 2024. 7. 28. 22:13


최근 프로젝트를 진행하며 백엔드에서 카카오 소셜 로그인 구현을 맡게 되었다.

 

Spring security에서 제공하는 기능을 활용하여 카카오 소셜 로그인을 구현한 과정을 정리해보도록 하겠다.

 

Oauth 2.0 란?

우선 oauth 2.0란 단순한 프로토콜을 의미한다. 외부 리소스 서버에서 특정 유저의 정보를 가져오기 위한 표준 규격이다.

 

Oauth 2.0에 대한 자세한 정보는 이전 글에 정리해 뒀으니 참고하길 바란다.

https://2junbeom.tistory.com/24

 

스프링 시큐리티 기본 개념공부 10. (OAUTH2 란?)

Section 11.OAUTH2oauth2는 많은 업계에서 사용중인 인증과 인가를 위한 프로토콜이다.OAUTH2가 해결한 문제 시나리오트위터 앱을 사용중인 유저들이 자신들의 트위터 사용 기록을 분석하고 싶어한다.

2junbeom.tistory.com

 

카카오 소셜 로그인 흐름도

카카오도 마찬가지로 Oauth 2.0 프로토콜을 따르기에 일반적인 흐름도를 가지고 있다.

 

https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#before-you-begin-process

 

Kakao Developers

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

developers.kakao.com

 

  1. 우리 서버에서 카카오 서버에 인증코드 요청을 보낸다.
  2. 카카오 서버에서 유저에게 카카오 로그인 및 정보 제공 동의 화면을 보여준다.
  3. 유저가 로그인에 성공하면 우리 서버에 인증 코드를 보내준다.
  4. 해당 인증 코드를 바탕으로 카카오 서버에 토큰 발급 요청을 보낸다
  5. 인증 코드가 정상적이었다면 토큰을 발급받고 해당 토큰을 바탕으로 유저의 정보를 카카오 리소스 서버에서 받아올 수 있다.

 

카카오 서버에 인증 코드 요청 보내기

다음 URL로 get 요청을 보내면 카카오 로그인 화면으로 이동하게 된다.

 

원래 위의 인자들을 비롯한 여러 인자를 포함해서 get 요청을 보내야 하지만 Spring security oauth - client 의존성을 이용하면 해당 인자들을 spring security에서 자동으로 추가시켜 준다.

 

인증 코드를 발급받고 해당 인증 코드를 바탕으로 토큰 발급까지 코드를 전부 구현해줘야 카카오 리소스 서버에 정보 요청을 할 수 있지만,

 

spring security oauth - client 의존성을 이용하면 인증 코드를 바탕으로 토큰을 발급 받고, 해당 토큰을 바탕으로 유저의 정보를 요청하는 것까지 모든게 자동으로 진행이 된다.

 

우리는 위의 URL로 get 요청을 보내기만 하면 된다.

 

그럼 이제 유저의 정보를 발급받고 난 후의 흐름을 살펴보겠다.

 

로그인 동작 흐름

  1. 사용자가 소셜 로그인에 성공하면 Oauth2UserService가 실행된다. 
  2. Oauth2UserService 내부의 LoadUser()메소드를 통해 유저의 정보를 데이터베이스에서 가져온다.
  3. 만약 데이터베이스에 유저의 정보가 존재하지 않는다면 데이터베이스에 저장시킨다.
  4. 이후 유저의 정보를 바탕으로 PrincipalDetail 객체를 만들어 Spring security 내부에서 인증된 사용자로 인식하도록 해준다.
  5. 모든 필터가 실행된 이후 토큰 발급을 위한 Handler를 만들어 Bean으로 등록해준다.

 

필자는 위의 흐름으로 로그인 성공 이후의 동작을 구현했다.

 

실제 구현 코드는 다음 포스트에서 다루도록 하겠다.