1. 카카오 로그인 API 사용하기
카카오 로그인의 과정을 볼 수 있다.
2. 인가 코드 받기
사용자가 권한을 부여한 후, 클라이언트 애플리케이션이 액세스 토큰을 얻기 위해 사용하는 코드이다.
https://kauth.kakao.com/oauth/authorize // 이 주소를 get 요청
API 주소와 필요한 파라미터가 있으면 인가 코드를 받을 수 있다.
GET 요청이기 때문에 쿼리스트링 방식으로 전송하면 된다.
2.1 Client_id 확인
앱키의 REST API 키를 확인할 수 있다.
2.2 Redirect_uri 확인
등록한 Redirect_uri 를 사용하면 된다.
2.3 Response_code
Response_code 는 그냥 code 를 적으면 된다.
https://kauth.kakao.com/oauth/authorize?redirect_uri=http://localhost:8080/oauth/callback&response_type=code&client_id={레스트API키}
그럼 이런 방식의 쿼리스트링 주소가 나온다.
이 주소를 브라우저에 입력하면 카카오 로그인 페이지를 볼 수 있다.
카카오 로그인 태그에 주소를 넣으면 카카오 로그인 버튼을 눌렀을 때 카카오 로그인 페이지로 간다.
3. 토큰 받기
클라이언트 서버는 회원에게 받은 인가 코드를 카카오에 전달해 토큰을 받는다.
3.1 토큰 받기 API
Post 요청으로 API 주소에 Body 데이터를 담아 전송한다.
grant_type
authorization_code 를 넣는다.
client_id
Rest API 키를 넣는다.
redirect_uri
등록한 Redirect_uri 를 사용한다.
code 확인
카카오 로그인을 하면 redirect_uri 주소를 통해 code 를 받을 수 있다.
해당 데이터를 Postman 을 통해 호출하면 토큰을 받을 수 있다.
3.2 DTO 만들기
KakaoResponse
@Data public static class TokenDTO{ @JsonProperty("access_token") private String accessToken; @JsonProperty("token_type") private String tokenType; @JsonProperty("refresh_token") private String refreshToken; @JsonProperty("expires_in") private Integer expiresIn; private String scope ; // scope 는 배열이기 떄문에 선택한 갯수에 따라 파싱이 달라질 수 있음. @JsonProperty("refresh_token_expires_in") private Integer refreshTokenExpiresIn; }
@JsonProperty 어노테이션은 SON 데이터와 Java 객체 간의 매핑을 위해 사용한다. 엑세스 토큰은 access_token 으로 전달되기 때문에 스프링에서 accessToken의 카멜 표기법 형태로 받기 위해 사용한다.
4. 사용자 정보 가져오기
클라이언트 서버가 인가 코드를 통해 토큰을 받으면 클라이언트 서버는 카카오에 사용자 정보를 가져온다. 가지고 온 정보를 통해 강제 회원가입 혹은 강제 로그인을 한다.
4.1 사용자 정보 가져오기 API
사용자 정보는 헤더 값만 필수이기 때문에 헤더 값만 넣어준다. Bearer 와 엑세스 토큰은 반드시 한 칸 띄워야 한다.
4.2 DTO 만들기
KakaoResponse
@Data public static class KakaoUserDTO { private Long id; @JsonProperty("connected_at") private Timestamp connectedAt; private Properties properties; @Data class Properties { private String nickname; } }
카카오에서 받은 데이터 중 필요한 데이터는 id 와 닉네임이다. 필요한 데이터만 DTO 형태로 만들었다.
Share article