자바/스프링(Spring)

스프링 시큐리티 + OAuth2.0 (Kakao편)

류창 2022. 9. 25. 23:43
반응형

이전 포스팅엔 구글 로그인 OAuth  연동을 해봤다.

 

이번 포스팅엔 kakao Oauth를 연동해보자.   

 

 

 

 

0. 카카오톡 REST API ,  시크릿키 받기

 

https://developers.kakao.com/

 

Kakao Developers

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

developers.kakao.com

 

 

 

카카오톡 로그인을 한뒤  몇가지 절차를 완료한후, 

 

' 내 어플리케이션 ' 을 클릭하자.

 

 

중앙에 보이는 애플리케이션 추가하기를 눌러서

 

앱 이름과 사업자명을 입력하자.  필자는 테스트용으로  아무렇게나 입력했다. 

 

 

 

만들어진 어플을 들어가면 4가지의 키를 받을수있는데,

 

우린 REST API 키를 가져가면된다.

 

 

그 다음 플랫폼 탭을 클릭하여

 

사용할 사이트 도메인을 입력해야한다.  우리는 카카오 로그인을 사용할것이니 ,  입력한후 

 

Redirect URI 를  등록하러가자

 

 

 

카카오 로그인의 활성화를  ON으로 바꿔주고,

 

Redirect URI를 입력합시다. 

 

이 RedirectURI는  카카오 로그인 화면창으로  바로 이동시킬 경로를 설정하는데.

 

/login/oauth2/kakao 를 설정했다. 

 

 

 

동의항목 탭으로 이동한다.

 

카카오는 받고싶은 정보를 선택해서 받을수있다. 

 

가볍게 닉네임 , 카카오계정(이메일) 만 선택해서 받아오기로했다.

 

 

마지막으로 카카오 로그인 보안 탭으로 들어가서

 

시크릿키를 받아오자! 

 

 

 

1. Application.yml 설정하기

 

설정하기 전에  다음 카카오 로그인 문서를 읽어보는걸 추천한다.

그래야  Application.yml에서 왜 이걸 설정해야 하는지 이해가갈것이다.

 

https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#request-code

 

Kakao Developers

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

developers.kakao.com

 

 

구글보다 카카오는 설정해줘야하는게 좀 많다..

 

Client- id  , secret : 카카오에서 받은키를 설정한다.

 

client-name : kakao   ->  설정을 안해줘도 무방하다.  (실제로 빼고 돌려봣는데 잘 돌아간다.)

 

 

###

 

토큰을 받기위해 필요한 정보다

 

authorization-grant-type  -> 권한부여 타입을 정한다.  카카오 로그인 문서에서  REST API방식은 무조건 authorization_code를 고정으로 하고있다.  authorization_code를 입력하자.

 

client-authentication-method  -> 인증코드를 보낼때 http메소드 타입을 정한다.

카카오는 Post로 인증코드를 받기에 설정해주자 (안하면 에러코드 받음..)

인가코드 요청은 Get방식인데  ,  카카오 인증서버에서 인증 및 동의요청은 POST인듯하다.

API문서를 뒤져봐도 나오지않아서 추측으로 Post가 확실한것같다.

 

redirect-uri:   카카오 문서를 보면 redirect_uri를 필수 인자로 받는다.  카카오 오픈콘솔에서 설정한  uri를 입력하자.

 

scope :  카카오 문서를 보면서 가져오고 싶은 정보를 가져올 수 있다.  가져오기전에   챕터 0  동의화면 탭에서  필요한 동의항목 여부를 꼭 확인하고 가져오자. 

필자는  profile 내부에있는  profile_nickname 과 account_email를 가져오기로 했다.

 

 

 

1-1  Provider 설정하기

스프링은 카카오를 지원하지 않기에  Provider를 직접 만들어줘야한다.

 

Provider는 4가지  권한부여 URI , 토큰 URI  , 사용자 정보 uri , 사용자 이름 식별타입을 넣어주면된다.

 

API 문서를 참고하여  넣어주자!

 

인가(권한 부여) 코드 받는 URI
토큰 받는 URI
사용자 정보 받아오는  URI
식별하기 위하여 id가 필요함

 

 

2. 스프링 KaKao OAuth 설정하기

 

이전 포스팅인    OAuth 구글편을 읽어 오셧다고 가정하겠습니다.

 

 

PrincipalOauth2UserService 에서 카카오의 경우를 만들어줍시다

 

 

카카오 유저 Info

카카오에서 응답으로 준  유저 정보 JSON을    맛있게 손질?? 하자.  

 

Provider는 카카오   ,   getProviderID는  id로 가져오자

 

getEmail은  kakao_account 맵에 감싸져있다.

 

getName(여기선 닉네임)은 kakao_account 안에 prifile 안에 감싸져있다. 닉네임을 빼오자.

 

헷갈릴때마다 API 문서를 보거나,  어플리케이션 내부에서 로그를 찍어서 확인하자!!

 

 

결과값은 이렇게 나온다.

 

{id=2963099128, connected_at=2023-08-13T13:10:05Z, properties={nickname=김태홍, profile_image=http://k.kakaocdn.net/dn/dpk9l1/btqmGhA2lKL/Oz0wDuJn1YV2DIn92f6DVK/img_640x640.jpg, thumbnail_image=http://k.kakaocdn.net/dn/dpk9l1/btqmGhA2lKL/Oz0wDuJn1YV2DIn92f6DVK/img_110x110.jpg}, kakao_account={profile_nickname_needs_agreement=false, profile_image_needs_agreement=false, profile={nickname=김태홍, thumbnail_image_url=http://k.kakaocdn.net/dn/dpk9l1/btqmGhA2lKL/Oz0wDuJn1YV2DIn92f6DVK/img_110x110.jpg, profile_image_url=http://k.kakaocdn.net/dn/dpk9l1/btqmGhA2lKL/Oz0wDuJn1YV2DIn92f6DVK/img_640x640.jpg, is_default_image=true}, has_email=true, email_needs_agreement=false, is_email_valid=true, is_email_verified=true, email=ajtwu1235@naver.com, has_age_range=false, age_range_needs_agreement=false, has_birthday=false, birthday_needs_agreement=false, has_gender=false, gender_needs_agreement=false}}

 

 

 

3. 실행해보기

 

 

 

 

입력이 잘 되는걸 확인할수있다!!

 

 

 

추가로 스프링 시큐리티를 사용하지않고  Oauth를 구현한 블로그 링크도 하나 남겨두고 갑니다.

 

https://velog.io/@723poil/Spring-Boot-OAuth-2.0-kakao

 

[Spring Boot] OAuth 2.0 (카카오 로그인)

진행중인 프로젝트에서 로그인 기능을 구현해야 하는데, 소셜 로그인을 사용하기로 했다. 그래서 OAuth 2.0을 사용해서 카카오를 통해 사용자 정보를 취득하기로 했다. 동작 흐름 카카오 공식문서

velog.io

 

 

반응형