카카오 로그인 REST API 구현
사용자가 필수 동의 항목에 모두 동의한 뒤 [동의하고 계속하기] 버튼 누르면, 카카오 인증 서버는 해당 사용자에 대한 인가 코드를 발급해 서비스의 redirect_uri에 전달
서비스 서버(우리)는 redirect_uri로 받은 요청을 처리해 인가 코드를 얻거나 상황에 맞는 페이지를 보여주도록 처리해야함
> Request
- URL
- GET /oauth/authorize?client_id={REST_API_KEY}&redirect_uri={REDIRECT_URI}&response_type=code HTTP/1.1
- Parameter
> Response
토큰 받기
인가 코드를 받은 뒤, 인가 코드로 액세스 토큰과 리프레시 토큰을 발급 받는 API
토큰 받기까지 마쳐야 카카오 로그인 완료
필수 파라미터들을 담아 POST로 요청
성공시 Redirect URI에 JSON 객체 전달
- 두가지 종류의 토큰값
- 초 단위의 만료시간 표함
code
1 액세스 토큰 발급 받기
AuthController.java
String accessToken = userService.getAccessToken(code); |
를 통해 access_token을 발급 받아야함
AuthController.java
spring에서 제공하는 RestTemplate을 이용하여 필요한 파라미터들을 담아서 요청해서 액세스 토큰을 받는다
2 액세스 토큰을 이용해서 회원 정보 뽑기
사용자 정보 요청 REST API는 사용자 액세스 토큰을 사용하는 방법, 앱 어드민 키를 사용하는 방법 두 가지로 제공됩니다. 어드민 키는 보안에 유의하여 사용해야 하므로 서버에서 호출할 때만 사용합니다.
사용자 액세스 토큰을 헤더(Header)에 담아 GET 또는 POST로 요청합니다.
추가 파라미터를 사용하면 특정 정보만 지정해서 받아오거나 URL 응답 값을 HTTPS로 받을지 지정할 수 있습니다.
Map<String, String> userMap = userService.requestKakaoUserInfo(accessToken); |
UserService.java
헤더에 알맞는 값 넣어 HttpEntity 생성하여 해당 URL로 요청보냄
> Response sample
3 받아온 데이터를 토대로 데이터 객체 생성
jsonschema2pojo
Reference properties For each property present in the 'properties' definition, we add a property to a given Java class according to the JavaBeans spec. A private field is added to the parent class, along with accompanying accessor methods (getter and sette
www.jsonschema2pojo.org
위 사이트 이용하여 access token으로 받아온 json을 Dto객체로 생성
import lombok.Data; // builder, getter, setter 생성해주는 라이브러리 |
UserService.java
ObjectMapper를 이용하여 받아온 json 데이터를 생성한 Dto 객체에 값 삽입
* ID는 email + 언더바(_) + 아이디
* 비밀번호는 우리 프로젝트에서 그닥 의미 없기 때문에 랜덤으로 설정