본문 바로가기
Web/Kakao developers

[2021.03.17] 인턴 +16 카카오로그인(이해하기) - 정리 완료

by injekim97 2021. 3. 17.
반응형

[2021.03.17] 인턴 +16   카카오 로그인(이해하기) - 정리 완료

 

developers.kakao.com/docs/latest/ko/kakaologin/common

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

-> Kakao Document API (문서)를 보고 최대한 정리한 글입니다.(해당 글 내용의 출처는 Kakao Developers에 있습니다)

-> 글을 보시다가, 모르시는 부분이 있으면 댓글로 남겨주세요. (최대한 아는 데까지 대답해드리겠습니다)

 

 

카카오 로그인 기능 소개

-> 카카오 로그인은 카카오 계정과 애플리케이션(이하 앱)을 연결하고 토큰을 발급받아 카카오 API를 사용할 수 있도록 하는 기능입니다.

-> 토큰은 사용자를 인증하고 카카오 API 호출 권한을 부여하는 액세스 토큰(Access Token)과 액세스 토큰을 갱신하는 데 쓰는 리프레시 토큰(Refresh Token)이 있습니다.

-> 로그아웃은 로그인을 통해 발급받은 토큰을 만료시켜 사용자가 서비스에서 로그아웃 요청했을 때나 서버에서 특정 사용자를 로그아웃하도록 요청할 때, 해당 사용자를 로그아웃시킬 수 있습니다. 또한, 로그아웃 또는 연결 끊기 후에도 다시 앱에 로그인 및 연결할 수 있습니다. 하지만 사용자가 연결을 끊었던 앱에 같은 카카오 계정으로 다시 로그인 및 연결하더라도 기존 이용 정보는 남아 있지 않으며 복구도 불가능합니다.

 

 

-> 위 표에서 카카오 API가 제공되는 것으로 표시된 기능은 서비스에서 카카오 API를 사용해 보다 편리하게 구현할 수 있습니다. 예를 들어 카카오 로그인을 사용하면 직접 서비스 ID 및 비밀번호를 입력받고 검증하는 과정을 구현하는 대신, 카카오 로그인을 통해 사용자를 인증하고 회원 정보를 수집할 수 있습니다.

-> 반면, 카카오 API가 제공되지 않는 가입 및 탈퇴 등 회원 정보에 대한 처리는 서비스에서 자체적으로 구현해야만 합니다. 카카오는 서비스 데이터에 접근하지 않기 때문에, 회원 정보를 대신 저장하거나 삭제할 수 없기 때문입니다.

 

 

-> 카카오톡에서 카카오 API에 대한 허용 범위를 나타내 주는 표이다.

-> X표시는 구현 자체가 되지 않은 서비스라고 생각하면 된다.

 

 

 

 

 

응답 코드(ERROR)

 

developers.kakao.com/docs/latest/ko/reference/rest-api-reference#response-code

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

-> 만약 서비스 앱이나 서버 에러가 아닌 요청 정보 문제로 로그인에 실패한다면 카카오 서버는 실패 원인을 응답으로 전달합니다. 이 때는 해당 링크를 참고해 원인을 찾아 수정

 

 

 

 

사용자 환경에 따른 인증 방법

 

 

 

사용자 정보 가져오기 응답

 

kakao_account에 담긴 사용자 정보 종류

 

-> 카카오에서 취급하지 않는 정보(여권번호 등)는 서비스에서 직접 수집해야 합니다.

-> 카카오계정에 있는 정보라도, 사용자가 카카오 로그인할 때 제 3자 정보 제공에 동의해야 이용 가능(동의하지 않으면 앱에서 요청을 받더라도 값을 제공 X)

 

-> 사용자 정보마다 포함되어 있는 needs_agreement 값은 해당 사용자 정보를 받기 위해 제 3자 제공 동의가 필요한지 알려줍니다. needs_agreement 값이 "true"라면 사용자 동의를 거쳐 해당 사용자 정보의 값을 받을 수 있는 상태입니다. 자세한 안내와 활용 방법은 needs_agreement를 참고합니다.

 

체크리스트: 필요한 사용자 정보 값을 전달받지 못했을 때

1. 동의 항목에 해당 사용자 정보 동의 항목을 설정했는지 확인합니다. '필수 동의' 또는 '선택 동의'로 설정해야 사용자 정보를 받을 수 있습니다. 반드시 필요한 정보는 수집 후 제공 옵션을 사용합니다.

2. {SCOPE_NAME}_needs_agreement의 키 값을 확인합니다. (예: email_needs_agreement) 값이 'true'이면 인가 코드 받기를 요청하여 동의 화면을 띄워 사용자의 동의를 얻습니다. 사용자가 이미 앱과 연결된 경우, 추가 항목 동의받기를 통해 동의 화면을 띄울 수 있습니다. 

 

 

 

프로필(profile)

-> 서비스에서 프로필 정보가 필요한 경우 [내 애플리케이션] > [카카오 로그인] > [동의 항목]에서 사용하도록 설정

 

 

 

 

 

 

이메일(email)

-> 사용자의 카카오 계정 이메일이 없을 수 있습니다. 이 경우, 카카오 계정 정보를 통한 수집(수집 후 제공) 옵션을 쓰거나 자체 수집해야 합니다.

-> 카카오 계정 이메일이 인증받지 않은 이메일일 수 있습니다. 인증받은 이메일만 사용해야 하는 서비스라면 인증 여부를 확인 후, 미인증 이메일 사용자에게 자체적으로 인증 절차를 진행해야 합니다

-> 카카오 계정의 이메일 정보는 사용자 요청에 따라 변경될 수 있습니다. 이러한 이유로 이메일을 ID로 삼거나 동일 사용자를 확인하는 방식을 권장하지 않습니다.

 

 

 

연령대(age_range)

 

연령대별 구간

 

 

생일(birthday)

 

 

출생 연도(birthyear)

 

 

성별(gender)

 

 

 

전화번호(phone_number)

-> 카카오 계정에 연결된 카카오톡의 전화번호입니다. 연계정보(CI) 생성 시 사용된 전화번호와 무관

-> 전화번호는 수집 후 제공 설정이 불가능

 

 

 

 

 

연계정보(CI)

 

-> 존 회원 데이터베이스에 동일한 회원이 있는지 대조하는 등 최소한의 목적으로만 참고해야 합니다

-> 카카오는 본인인증기관이 아닙니다. 카카오 계정의 연계정보로 서비스에 필요한 본인 인증을 대신할 수 없습니다.

 

 

 

 

 

사용자 프로퍼티(properties)

 

 

다른 API로 받는 사용자 정보

-> 배송지 정보 : 기본 제공되지 않습니다. 비즈 앱 카카오 for 비즈니스에서 하나 이상의 비즈니스 채널을 연결하면 별도 검수 없이 '선택 동의' 항목으로 설정 가능합니다. '필수 동의' 항목으로 설정하려면 카카오 for 비즈니스에서 정보 제공 항목 검수를 요청합니다.

-> 카카오톡 채널 추가 상태 및 내역 : 기본 제공되지 않으나, 카카오 for 비즈니스에서 하나 이상의 비즈니스 채널을 연결하면 별도 검수 없이 '필수 동의' 또는 '선택 동의' 항목으로 설정할 수 있습니다. 채널 관계 확인하기 기능을 이용하기 위해서는 '필수 동의' 또는 '선택 동의'로 설정해야 합니다.

 

 

 

사용자 동의

-> 모든 사용자 정보는 사용자 동의가 있어야만 제공

-> 카카오 계정에 저장되어 있는 정보라도 사용자가 앱에 제공하는 데 동의하지 않았다면 사용자 정보 가져오기를 통해 받을 수 없습니다.

-> 따라서 서비스 앱은 특정 정보를 얻기 위해 사용자로부터 동의를 구해야 합니다.

[내 애플리케이션] > [제품 설정] > [카카오 로그인] > [동의 항목]에서 카카오 로그인 시 제3자 정보제공 동의를 받을 항목들을 설정

 

 

 

 

추가 항목 동의받기

-> 사용자가 카카오에도 제공을 거부한 정보(needs_agreement = false)는 카카오도 수집할 수 없습니다

-> 자체적으로 사용자로부터 수집해야 합니다. 또한 서비스 약관은 이 기능으로도 추가 동의받을 수 없습니다

 

 

 

 

Step 1. 필요한 동의 항목 확인하기

 

 

-> 추가 사용자 정보 제공을 위한 사용자 동의가 필요한 경우, 사용자 정보 가져오기 요청 시, 필요한 사용자의 동의가 없으면 해당 사용자 정보를 제외한 응답을 받습니다.

-> 이 경우에는 {SCOPE_NAME}_needs_agreement 값을 보고 사용자 동의가 필요한지 판단할 수 있습니다. 사용자가 동의하면 각 사용자 정보 제공이 가능할 경우에 true 값으로 반환

 

 

 

Sample: 이메일 동의 항목에 사용자가 동의하지 않은 경우(API의 응답 예제)

 

-> 사용자가 이메일 동의 항목에 동의하지 않았으므로, 위 응답 예제에는 이메일 정보가 포함되어 있지 않습니다

-> 하지만, email_needs_agreement 값이 true이므로, 사용자가 동의하면 이메일 정보를 받을 수 있는 상태

 

 

 

 

 

Sample: 카카오톡 메시지 보내기 기능 접근 권한이 없어 전송 실패

-> 사용자 동의가 없어 해당 카카오 API 요청이 실패했을 때, 에러 응답은 어떤 동의 항목에 대한 사용자 동의가 부족해서 api_type에 해당하는 API 요청이 실패하는지 required_scope로 알려줍니다.

 

-> 또한 사용자가 이미 동의한 동의 항목 정보를 allowed_scopes로 확인할 수 있습니다. 사용자에게 required_scope의 동의 항목을 추가 항목 동의받기 요청하고 동의받아야 해당 API를 사용할 수 있습니다.

 

-> 위 응답 예제의 경우, required_scopes 값으로 추가 동의받아야 할 항목이 talk_message임을 알려주고 있습니다. 따라서 추가 항목 동의받기로 사용자에게 talk_message 동의를 요청하고, 사용자가 동의하고 나면 카카오톡 메시지 보내기를 할 수 있습니다.

 

 

 

 

Step 2. 추가 항목 동의받기

-> 사용자에게 필요한 동의 항목의 추가 항목 동의받기를 요청합니다.

-> [내 애플리케이션] > [카카오 로그인] > [동의 항목] 메뉴의 각 동의 항목 ID를 사용

developers.kakao.com/docs/latest/ko/kakaologin/rest-api#additional-consent

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

-> REST API 

 

developers.kakao.com/docs/latest/ko/kakaologin/js#additional-consent

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

-> Java Script

 

 

 

 

Step 3. 토큰 재발급 및 결과 확인하기

-> 사용자는 추가 항목 동의받기를 통해 필요한 동의 항목에 동의하거나, 동의하지 않고 취소 버튼을 눌러 동의 화면을 닫을 수 있습니다. 따라서 사용자가 필요한 동의 항목에 동의했는지 확인하는 과정이 필요합니다.

 

 

Sample: 토큰 발급받기 응답

-> 카카오 API 사용에 필요한 추가 동의 여부 또한 토큰 받기 요청의 응답에 포함된 scope로 알 수 있으며, 해당 API 요청의 성공 여부로도 확인 가능합니다.  

 

 

 

 

 

 

 

needs_agreement

-> needs_agreement는 사용자 정보 종류별로 포함되어 있는 키입니다.

-> needs_agreement 값은 이미 제공되고 있는 사용자 정보의 경우 "false"(사용자 정보의 값이 없다면, 해당 사용자 정보는 자체 수집하거나 관련 기능을 제공하지 않아야 합니다.)

-> 추가 제공이 가능한 사용자 정보의 경우 "true"입니다. (이 값이 "true"인 사용자 정보는 추가 항목 동의받기로 사용자 동의를 거쳐 값을 제공받을 수 있습니다.) 

 

 

 

 

 

 

 

카카오 계정의 사용자 정보 값, 수집 후 제공 기능 사용 여부에 따른 neeeds_agreement 값

 

 

 

 

로그아웃

-> 카카오 로그인의 로그아웃은 사용자가 카카오 로그인을 통해 발급받은 토큰을 만료시켜, 로그아웃을 요청한 서비스에서 해당 사용자 정보로 카카오 API를 호출할 수 없게 합니다.

-> 이 로그아웃 처리는 카카오 API 이용에만 영향을 미치므로 서비스 회원 로그아웃은 자체 구현해야 합니다.

 

-> 서비스 로그아웃 버튼을 통해 서비스와 카카오 계정을 동시에 로그아웃 처리하고 싶다면 카카오 계정과 함께 로그아웃 추가 기능을 사용합니다. 사용자가 로그아웃 버튼을 눌러 로그아웃을 요청했을 때, 사용자를 연결 페이지로 이동시켜 서비스만 로그아웃할 것인지, 카카오 계정도 함께 로그아웃할 것인지 선택할 수 있도록 하는 기능입니다.

 

-> 카카오 계정과 함께 로그아웃 기능을 사용하려면, 사용자가 로그아웃을 요청하고 리다이렉트 될 Logout Redirect URI을 등록하고, 서비스 서버에서 서비스 세션을 만료시켜야 합니다. 기능 동작은 다음과 같이 이뤄집니다:

  • 사용자가 로그아웃 버튼을 눌러 연결 페이지로 진입합니다.
  • 사용자가 '서비스만 로그아웃', '카카오 계정과 함께 로그아웃' 중 원하는 로그아웃 처리를 선택합니다.
  • 사용자가 서비스만 로그아웃을 선택했다면 즉시 앱 정보에 등록된 Logout Redirect URI로 리다이렉트 됩니다.
  • 사용자가 카카오 계정과 함께 로그아웃을 선택했다면 카카오 계정 로그인 상태에 따라 다음과 같이 동작합니다.
    • 카카오 계정 세션이 존재할 경우, 카카오계정 세션을 만료시킨 후 앱 정보에 등록된 Logout Redirect URI로 리다이렉트 됩니다.
    • 카카오 계정 세션이 존재하지 않을 경우, 즉시 앱 정보에 등록된 Logout Redirect URI로 리다이렉트 됩니다.

-> 카카오 계정과 함께 로그아웃 기능은 REST API로 구현할 수 있습니다. 설정 및 구현 방법은 REST API 개발 가이드를 참고합니다.

 

 

 

 

 

 

연결과 연결 끊기

-> 연결은 카카오 로그인 시 카카오 플랫폼에서 처리하므로 서비스에서 별도 API를 호출해 요청할 필요가 없습니다. 하지만 연결을 끊는 것은 서비스에서도 가능합니다. 연결 끊기 API를 사용해 서비스와 사용자의 연결 상태를 해제할 수 있습니다.

 

 

 

서비스 회원 가입 및 탈퇴

-> 서비스 회원 가입은 각 서비스 회원 정보에 카카오 계정 사용자 정보를 회원으로 저장하는 일입니다. 이는 연결과 별개의 처리입니다. 카카오 계정으로 로그인한 사용자 정보를 서비스 서버에 회원 가입 처리하지 않으면 정상적인 가입 처리가 완료되지 않습니다. 서비스 회원 탈퇴 또한 서비스가 자체적으로 구현

-> 연결 끊기는 카카오 계정과 앱의 관계만 끊을 뿐, 서비스 서버에 저장된 회원 정보까지 지우지 않기 때문입니다.

 

 

 

 

토큰 관리

-> 토큰은 매번 인증을 거치지 않고도 일정 기간 카카오 API를 사용할 수 있도록 하는 권한 증명입니다.

-> Kakao SDK는 토큰 관리 기능을 갖고 있습니다

-> REST API 사용 시에는 필요에 따라 토큰 정보 확인이나 갱신을 위한 요청을 해야 합니다.

 

-> 토큰은 두 가지입니다.

1. 보안상의 이유로 권한 증명 역할을 하는 액세스 토큰(Access Token)은 비교적 짧은 유효기간을 가짐

2. 일정 기간 동안 인증을 거치지 않고 액세스 토큰을 갱신할 수 있게 해주는 역할을 하는 리프레시 토큰(Refresh Token)은 보다 긴 유효기간을 가짐

 

 

-> 토큰 유효기간은 플랫폼마다 다릅니다. 토큰의 역할과 유효기간을 표로 정리하면 다음과 같습니다.

 

 

 

지원 범위 

-> REST API 로그인은 인가 코드 받기, 토큰 받기 두 단계로 구성,

-> 서비스 관리자를 위한 기능인 사용자 목록 받기 기능을 지원합니다. 

반응형

댓글