이전 포스팅엔 구글 로그인 OAuth 연동을 해봤다.
이번 포스팅엔 kakao Oauth를 연동해보자.
0. 카카오톡 REST API , 시크릿키 받기
카카오톡 로그인을 한뒤 몇가지 절차를 완료한후,
' 내 어플리케이션 ' 을 클릭하자.
중앙에 보이는 애플리케이션 추가하기를 눌러서
앱 이름과 사업자명을 입력하자. 필자는 테스트용으로 아무렇게나 입력했다.
만들어진 어플을 들어가면 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
구글보다 카카오는 설정해줘야하는게 좀 많다..
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 문서를 참고하여 넣어주자!
2. 스프링 KaKao OAuth 설정하기
이전 포스팅인 OAuth 구글편을 읽어 오셧다고 가정하겠습니다.
PrincipalOauth2UserService 에서 카카오의 경우를 만들어줍시다
카카오에서 응답으로 준 유저 정보 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)' 카테고리의 다른 글
스프링(Spring) 테스트 환경에서 @PostConstruct 비활성화 (0) | 2022.10.12 |
---|---|
XSS , CORS, CSRF 의 차이점 (0) | 2022.09.28 |
스프링시큐리티 + OAuth2.0 사용해보자 (Google편) (1) | 2022.09.24 |
스프링 시큐리티를 사용해보자!! (0) | 2022.09.23 |
자바(Spring) OpenAPI를 통한 JSON Parser 코드 (0) | 2022.09.08 |