[Spring] Authorization code Grant 2 - 카카오 로그인

류재성's avatar
Jun 05, 2024
[Spring] Authorization code Grant 2 - 카카오 로그인
 

1. 카카오 로그인 API 사용하기

 
 
notion image
 
카카오 로그인의 과정을 볼 수 있다.
 

2. 인가 코드 받기

💡
사용자가 권한을 부여한 후, 클라이언트 애플리케이션이 액세스 토큰을 얻기 위해 사용하는 코드이다.
 
notion image
 
notion image
https://kauth.kakao.com/oauth/authorize // 이 주소를 get 요청
 
API 주소와 필요한 파라미터가 있으면 인가 코드를 받을 수 있다.
GET 요청이기 때문에 쿼리스트링 방식으로 전송하면 된다.
 

2.1 Client_id 확인

notion image
 
앱키의 REST API 키를 확인할 수 있다.
 
 

2.2 Redirect_uri 확인

notion image
등록한 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키}
 
그럼 이런 방식의 쿼리스트링 주소가 나온다.
 
notion image
이 주소를 브라우저에 입력하면 카카오 로그인 페이지를 볼 수 있다.
 
notion image
 
카카오 로그인 태그에 주소를 넣으면 카카오 로그인 버튼을 눌렀을 때 카카오 로그인 페이지로 간다.
 
 

3. 토큰 받기

💡
클라이언트 서버는 회원에게 받은 인가 코드를 카카오에 전달해 토큰을 받는다.
 

3.1 토큰 받기 API

notion image
 
notion image
Post 요청으로 API 주소에 Body 데이터를 담아 전송한다.

grant_type

authorization_code 를 넣는다.

client_id

Rest API 키를 넣는다.

redirect_uri

등록한 Redirect_uri 를 사용한다.

code 확인

notion image
 
notion image
 
카카오 로그인을 하면 redirect_uri 주소를 통해 code 를 받을 수 있다.
 
 
notion image
 
해당 데이터를 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

notion image
notion image
 
💡
사용자 정보는 헤더 값만 필수이기 때문에 헤더 값만 넣어준다. Bearer 와 엑세스 토큰은 반드시 한 칸 띄워야 한다.
 
notion image
 

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

{CODE-RYU};