[Spring Boot] 카카오 로그인 API 연동 과정

김광현·2023년 9월 20일
0

Spring Boot

목록 보기
3/3
post-thumbnail

카카오 로그인 API 연동 과정를 설명합니다. 🏆


💻 카카오 로그인 연동 URL 생성하기

카카오 로그인을 시작하는 단계로써, 카카오 로그인 동의 화면을 호출하고, 사용자 동의를 거쳐 인가 코드 발급을 요청하는 API입니다.


요청 URL

GET /oauth/authorize?client_id={REST_API_KEY}&redirect_uri={REDIRECT_URI}&response_type=code
HTTP/1.1
Host : kauth.kakao.com

응답

사용자가 [동의하고 계속하기] 선택 후 로그인 요청이 승인되면 토큰 받기 요청 필요한 인가코드를 전송해줍니다.

HTTP/1.1 302 Found
Content-Length: 0
Location: ${REDIRECT_URI}?code=${AUTHORIZE_CODE}


💻 토큰 받기

인가 코드를 받은 뒤, 인가 코드로 액세스 토큰과 리프레시 토큰을 발급받는 API입니다. 인가 코드 받기만으로는 카카오 로그인이 완료되지 않으며, 토큰 받기까지 마쳐야 카카오 로그인을 정상적으로 완료할 수 있습니다.


client-authentication-method: POST

다른 서비스와는 달리 카카오는 필수 파라미터 값들을 담아 POST로만 요청이 가능합니다. 그래서 yml에 client-authentication-method: POST을 명시해 줘야 합니다.

요청 성공 시, 응답은 JSON객체로 Redirect URL에 전달됩니다. 토큰 받기를 통해 발급받은 액세스 토큰은 사용자 정보 가져오기와 같은 카카오 로그인이 필요한 API를 호출할 때 사용합니다.


요청 URL

POST /oauth/token HTTP/1.1
Host: kauth.kakao.com
Content-type: application/x-www-form-urlencoded;charset=utf-8

요청 Parameter

토큰을 요청할 때 grant_type, clinet_id, redirect_uri, code의 데이터는 필수로 제공해줘야 합니다.


요청 샘플

curl -v -X POST "https://kauth.kakao.com/oauth/token" \
-d "grant_type=authorization_code" \
-d "client_id={REST_API_KEY}" \
-d "redirect_uri={REDIRECT_URI}" \
-d "code={AUTHORIZATION_CODE}"


💻 사용자 정보 가져오기

로그인한 사용자의 정보를 불러옵니다. 사용자 정보 요청 REST API는 사용자 액세스 토큰을 사용하는 방법, 앱 어드민 키를 사용하는 방법 두 가지로 제공됩니다. 어드민 키는 보안에 유의하여 사용해야 하므로 서버에서 호출할 때만 사용합니다.

사용자 액세스 토큰 또는 어드민 키를 헤더(Header)에 담아 GET 또는 POST로 요청합니다.


요청 URL (액세스 토큰 사용)

GET/POST /v2/user/me HTTP/1.1
Host: kapi.kakao.com
Authorization: Bearer {ACCESS_TOKEN}
Content-type: application/x-www-form-urlencoded;charset=utf-8

응답

카카오는 응답을 회원번호인 id로 제공합니다. 사용자 로그인 정보를 획득하기 위해서는 프로필 정보 조회 API를 먼저 호출해야 합니다.


user_name_attribute: id

받을 데이터 email, nickname, profile_image는 해당 정보는 kakao_account라는 JSON객체로 주어집니다.


응답 데이터 형태

HTTP/1.1 200 OK
{
    "id":123456789,
    "connected_at": "2022-04-11T01:45:28Z",
    "kakao_account": { 
        // 프로필 또는 닉네임 동의 항목 필요
        "profile_nickname_needs_agreement	": false,
        // 프로필 또는 프로필 사진 동의 항목 필요
        "profile_image_needs_agreement	": false,
        "profile": {
            // 프로필 또는 닉네임 동의 항목 필요
            "nickname": "홍길동",
            // 프로필 또는 프로필 사진 동의 항목 필요
            "thumbnail_image_url": "http://yyy.kakao.com/.../img_110x110.jpg",
            "profile_image_url": "http://yyy.kakao.com/dn/.../img_640x640.jpg",
            "is_default_image":false
        },
        // 이름 동의 항목 필요
        "name_needs_agreement":false, 
        "name":"홍길동",
        // 카카오계정(이메일) 동의 항목 필요
        "email_needs_agreement":false, 
        "is_email_valid": true,   
        "is_email_verified": true,
        "email": "sample@sample.com",
        // 연령대 동의 항목 필요
        "age_range_needs_agreement":false,
        "age_range":"20~29",
        // 출생 연도 동의 항목 필요
        "birthyear_needs_agreement": false,
        "birthyear": "2002",
        // 생일 동의 항목 필요
        "birthday_needs_agreement":false,
        "birthday":"1130",
        "birthday_type":"SOLAR",
        // 성별 동의 항목 필요
        "gender_needs_agreement":false,
        "gender":"female",
        // 카카오계정(전화번호) 동의 항목 필요
        "phone_number_needs_agreement": false,
        "phone_number": "+82 010-1234-5678",   
        // CI(연계정보) 동의 항목 필요
        "ci_needs_agreement": false,
        "ci": "${CI}",
        "ci_authenticated_at": "2019-03-11T11:25:22Z",
    },
    "properties":{
        "${CUSTOM_PROPERTY_KEY}": "${CUSTOM_PROPERTY_VALUE}",
        ...
    },
    "for_partner": {
        "uuid": "${UUID}"
    }
}

✔ 카카오 로그인 API 연동 과정를 살펴봤습니다.

profile
🅸nterest 🆂olving 🆃horough 🅹udgment

0개의 댓글