inblog logo
|
{CODE-RYU};
    SPIRNG

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

    류재성's avatar
    류재성
    Jun 05, 2024
    [Spring] Authorization code Grant 2 - 카카오 로그인
    Contents
    1. 카카오 로그인 API 사용하기2. 인가 코드 받기3. 토큰 받기4. 사용자 정보 가져오기
     

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

     
    Kakao Developers
    카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
    Kakao Developers
    https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api
    Kakao Developers
     
    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};

    RSS·Powered by Inblog