1. 소셜 로그인 OAuth이란
* 모든 웹사이트에서 일일이 그 사이트만의 회원 가입 거치는거는 귀찮아서 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준.
* OAuth를 사용하는 서비스 제공자는 국내에서는 보통 네이버,카카오톡이 있다.
카카오 OAuth 사용방법 => 카카오 developers 공식 문서
2. 시작전 kakao developers 설정
(1) 앱설정- 플랫폼의 web플랫폼 등록 누르고 도메인 설정해준다.
(2) 카카오 로그인-Redirect Url 등록 하고 활성화 on 해준다
(3) 동의 항목에서 닉네임은 필수 ,카카오계정(이메일)은 선택으로 하고 둘다 목적을 회원가입으로 한다.
만약 이메일 설정 아예 못하게 나오는 경우 비즈앱 전환후,비즈니스 인증하면 된다.
3. 카카오 정보로 로그인 or 회원가입
Controller
* 요청 주소는 카카오 developers에서 애플리케이션 생성할때 설정한 Redirect Url
* 코드 보면 클라가 카카오 로그인 요청 할때 RequestParm으로 key는 client_id 넣고 value는 앱키-REST API키 값을 넣고 보낸다.(정확히 모르나 rest api key가 보안에 중요하면 헤더나 쿠키에 넣고 요청)
* 서비스 에서 Jwt토큰 받아오고 쿠키에 넣는데 쿠키에는 공백 불가라 substring으로 Bearer 자르고 넣는다
Service
* 이제 서비스쪽에서는 카카오 자체 토큰 요청,요청후 받은 카카오 자체 토큰으로 해당 사용자 정보(카카오의 닉네임,이메일),필요시 회원가입(카카오 자체 회원 아니고 개발하는 현재 서버),JWT토큰 반환(카카오 자체에서 아니고 현재 개발하는 서버용 JWT토큰)을 해야한다.
(1) 카카오 자체 토큰 요청
*카카오 자체 토큰 요청시 필요한 정보 -> 공식 문서
* getToken의 매개변수는 rest api 키이고, 공식 문서 보면 헤더,바디에 넣어야 할 것 들이 정해져 있으므로 해당 정보 넣은뒤 restTemplate.exchange()로 카카한테 요청하면 된다.
* 요청후 받은 정보는 json형태 이므로 Jackson의 ObjectMapper를 이용해 직접 엑세스 토큰만 걸러낸다.
(2) 카카오 자체 토큰으로 사용자 정보(닉네임,이메일)가져오기
* 카카오 자체 토큰으로 사용자 정보 가져오기 -> 공식문서
* 카카오 자체 토큰 요청때랑 똑같이 헤더,바디에 카카오에서 받아야 할 정보 넣고 받은 json을 똑같이 Jackson의 ObjectMapper를 이용해 카카오 id(pk),닉네임,이메일만 걸러낸다.
(3) 현재 개발중 서버 회원 가입,JWT토큰 반환
* 이제 카카오에서 받아온 사용자 정보로 현재 개발중 서버에 이미 카카오로 가입한 사람인지 체크후 가입 안한사람이면
가입하게 하고,이미 가입한 사람이면 kakaoUser객체 리턴후 위에 서비스 첫번째 캡처에 4번 JWT토큰 반환에
kakaoUser객체에 있는 이름으로 현재 개발중 서버의 JWT토큰 반환받게 한다.
추가) 클라에서 Rest Api Key가 필요한 이유?
맨처음에는 그냥 서버에서만 Rest Api Key알고 있다가 클라가 카카오 로그인 요청시 서버가 Rest Api Key를 갖고 있으니 카카오 서버에 그냥 Rest Api Key를 담고 요청하면 끝 아닌가 생각했는데
정확히는 아닐 수 있으나 사용자가 카카오 로그인 하기 버튼 누르면 밑에 캡처부분 페이지 화면이 나오는데 이 화면은 카카오 서버에서 제공해주기 때문에 프론트 입장에서 Rest Api Key가 필요한듯하다
'Spring' 카테고리의 다른 글
CORS 와 PreFlight (0) | 2024.10.11 |
---|---|
@QueryHint 와 @Transaction readOnly 차이 / 비공개 (0) | 2024.04.08 |
Spring_5주차-(1) (0) | 2023.11.28 |
Spring_4주차-(2) (0) | 2023.11.14 |
Spring_4주차-(1) (0) | 2023.11.10 |