Kakao Developer 읽어보기

박은정·2021년 9월 16일
2

프로젝트

목록 보기
27/34

구글링을 해본 결과 두개의 velog에서 많은 도움을 받았다

그래서 나는 카카오소셜로그인의 기능구현에 대해서 적는 것 보다는
내가 Kakao Developer에 적힌 내용을 이해하는 거에 더 큰 중점을 둘 예정이다

Kakao Developer 사이트

https://developers.kakao.com

웹사이트에서 카카오톡을 이용한 서비스를 구현할 때 Kakao Developer에서 여러가지 기능을 지원받을 수 있는 걸 확인했다...!

  • 카카오 로그인
  • 카카오톡 소셜
  • 메시지
  • 지도/로컬
  • 카카오싱크
  • 카카오톡 채널
  • 비전

그중에서도 당연히 카카오 로그인에 대해서 알아보려고 한다

⚠️ 주의 : 나 혼자 이해하기도 벅찬 내용이라 블로그의 내용이 더러울 것같다
그리고 이 블로그의 내용은 사실상 kakao developer 내용을 그대로 가져와서 본인이 이해할 수 있도록 적은거라 도움이 안될 것같다...
그럼에도 이렇게 블로깅을 하는 이유는 내가 직접 적어보면서 천천히 음미하면서(?) 이해하기 위함이다!!

0. 카카오 로그인 서비스 이해

  • 카카오계정과 애플리케이션을 연결하고
  • 토큰을 발급받아 카카오 API를 사용할 수 있도록 하는 기능

토큰

  1. 액세스 토큰(Access Token)

    • 사용자를 인증하고 카카오 API 호출 권한을 부여한다
    • 사용자를 인증하고 카카오 API 호출 권한을 부여한다
  2. 리프레시 토큰(Refresh Token)

    • 액세스 토큰을 갱신하는 데 쓰인다
    • 사용자가 매번 카카오계정 정보를 입력하거나 카카오톡으로 로그인하지 않고도 액세스 토큰을 발급받을 수 있게 해준다

로그아웃

  • 로그인을 통해 발급받은 토큰을 만료 시켜 해당 사용자를 로그아웃시킨다
  • 사용자가 서비스에서 로그아웃 요청 했을 때나 서버에서 특정 사용자를 로그아웃하도록 요청 할 때

연결 끊기

  • 연결과 대조되는 개념
  • 카카오계정과 앱의 연결을 끊는 기능
  • 앱에서 더 이상 해당 사용자 정보로 API를 호출할 수 없다
  • 카카오 플랫폼에서도 해당 앱에 대한 해당 사용자의 데이터가 모두 지워진다

로그아웃 또는 연결 끊기 후에도 다시 앱에 로그인 및 연결할 수 있습니다.
하지만 사용자가 연결을 끊었던 앱에 같은 카카오계정으로 다시 로그인 및 연결하더라도 기존 이용 정보는 남아 있지 않으며 복구도 불가능하다

카카오 로그인 구현 방법

  • Kakao SDK for Android
  • iOS
  • JavaScript
  • REST API

OAuth 2.0

공개 API(Open API)로 제공되는 표준 인증 방법

  • 사용자가 앱에서 카카오 로그인 버튼을 클릭합니다.

1. 카카오톡 로그인 진행과정

카카오계정의 사용자 자격정보로 인가 코드를 받아오고,
인가 코드로 액세스 토큰과 리프레시 토큰을 얻는 과정으로 구성된다

  1. 사용자가 [카카오톡으로 로그인]을 선택

    • 카카오톡 실행 또는 실행 중인 카카오톡으로 연결된다
    • 카카오톡에 연결된 카카오계정의 자격정보(Credentials)를 통해 사용자를 인식한다
  2. [다른 카카오계정으로 로그인]을 선택

    • 직접 계정 정보를 입력하는 화면이 출력된다
    • 해당 계정의 자격정보로 인식한다
  3. 카카오톡이 설치되어 있지 않은 기기나 PC 웹 환경

    • 직접 계정 정보를 입력하여 카카오계정으로 로그인하게끔 진행된다
  4. 자격정보가 올바르다면

    • 카카오 로그인 동의 화면을 통해 사용자로부터 사용자 정보 및 기능 활용 동의를 받는다.
    • 사용자가 필수 항목에 동의하고 로그인을 요청하면
    • 인가 코드(Authorization Code)가 발급되고
    • 앱 정보의 Redirect URI 카카오 로그인버튼 누르는 화면 에 전달된다
  5. 서비스 앱이나 서버 에러가 아닌 요청 정보 문제로 로그인에 실패한다면

    • 카카오 서버는 실패 원인을 응답으로 전달한다
    • 이 때는 응답 코드를 참고해 원인을 찾아 수정할 수 있습니다.
  6. 로그인을 통해 앱과 사용자가 연결되고 토큰도 발급받았다면

    • 사용자 정보 가져오기를 통해 현재 로그인한 사용자의 정보를 확인하여 서비스에 활용할 수 있다

앱은 전달 받은 인가 코드를 기반으로 토큰을 요청하고 받는다

카카오 서버 호스트 분류

  • 인증 서버(kauth.kakao.com) : 카카오 로그인
  • API 서버 : 사용자 정보 가져오기 등 다른 기능

2. 카카오 로그인 한 뒤, 사용자 동의받기

  1. 사용자 동의
    • 카카오 로그인 할 때 서비스는 카카오 API를 통해 → 사용자 정보 및 서비스 접근권한을 요청하면서 사용자가 직접 동의해야 한다
  2. 동의 철회
    • 서비스에서도 동의 철회하기 API 를 사용해 처리할 수 있다
    • 사용자가 동의 철회 시에도 동의 철회하기 API가 호출된다
    • 사용자는 카카오계정 웹사이트의 [계정 이용] 이나 카카오톡의 [설정] > [개인/보안] > [연결된 서비스 관리] 메뉴 를 통해 선택 동의 항목에 대한 동의 를 철회할 수 있습니다.

사용자의 동의를 받아야 하는 이유

  1. 모든 사용자 정보와 서비스 접근권한은 사용자 동의가 있어야만 제공되고
  2. 카카오계정에 저장되어 있는 정보라도 사용자가 앱에 제공하는 데 동의하지 않았다면 사용자 정보 가져오기를 통해 받을 수 없다

서비스 이용에 필수적인 동의 항목

  1. [내 애플리케이션] > [카카오 로그인] > [동의 항목] 에서 카카오 로그인 시 제 3자 정보제공 동의를 받을 항목들을 설정할 수 있다
  2. 사용자의 동의를 받는 시점
    • 사용자가 처음으로 카카오 로그인 하는 시점에 제공 동의하도록 처리할 수 있으나
    • 카카오 API를 사용해 특정 정보가 필요한 시점에 동의를 요청할 수도 있다
    • 일부 동의 항목은 서비스에 회원 가입할 때에 필요하지 않지만, 일부 기능을 이용할 때 필요해질 수 있다
  3. 사용자 정보를 과도하게 수집하지 않도록 해당 기능을 이용하려는 시점에 추가로 제공 동의받도록 하는 것이 좋다

needs_agreement

  • 사용자 정보 종류별로 포함되어 있는 key 를 말한다
  • 각 서비스에서 사용하도록 설정한 동의 항목에 한해 제공되고 사용자 동의 필요 여부 를 의미한다
  • 특정 사용자 정보에 대해, 서비스에서 카카오 로그인 또는 추가 항목 동의 받기 를 통해
  • 사용자로부터 제3자 제공 동의를 받으면 해당 정보를 받을 수 있는지 알려준다

needs_agreement key 값

  1. true : 추가 제공이 가능한 사용자 정보

    • 추가 항목 동의 받기로 사용자 동의를 거쳐 값을 제공 받을 수 있다
  2. false : 이미 제공되고 있는 사용자 정보

    • "false"지만 사용자 정보의 값이 없다면 : 해당 사용자 정보는 자체 수집하거나 관련 기능을 제공하지 않아야 한다
  • 사용자가 해당 정보를 제공하지 않은 경우
    : 카카오계정에서 수집한 뒤, 제공 기능을 사용해 값을 제공 받을 수 있다
  • 사용자가 카카오계정 정보 수집에 동의하지 않은 경우
    : 값을 제공할 수 없으므로 → 해당 사용자 정보가 없는 경우를 서비스에 고려해야 한다

3. 사용자 정보

  • 카카오 로그인 후 사용자 정보 가져오기 를 비롯한 카카오 API를 통해
    → 사용자 정보를 제공받을 수 있다
  • 사용자 정보를 제공 받으려면 해당 사용자가 카카오 로그인 시 동의 항목을 통해
    → 앱에 정보를 제공하는 데 동의해야 한다

사용자 정보 가져오기 API로 받는 사용자 정보

  1. 사용자 정보 가져오기 API를 통해 → 사용자의 정보를 제공한다
  2. 제공 받은 사용자 정보의 활용
    • 카카오 로그인
    • 카카오싱크 간편가입할 때의 서비스의 회원 정보로 활용
  3. 카카오에서 취급하지 않는 정보(여권번호 등)는 서비스에서 직접 수집해야 한다

자료형과 형식을 포함한 상세 정보는 REST API 응답을 참고한다

카카오계정 정보

  1. 카카오계정 정보에 포함된 각 항목은 정보 제공을 위해 해당 사용자 동의가 필요한지 알려주는 needs_agreement 값 을 포함한다
  2. needs_agreement 값이 true : 사용자 동의를 거쳐 해당 사용자 정보의 값을 받을 수 있는 상태
  • 프로필 (닉네임/사진)
  • 이메일
  • 연령
  • 생일
  • 출생 연도 : 비즈니스로 설정해야 가능
  • 성별
  • 전화번호 : 비즈니스로 설정해야 가능
  • 연계정보 (CI) : 비즈니스로 설정해야 가능

연계정보 ?!
카카오계정의 암호화된 이용자 확인 값
기존 회원 데이터베이스에 동일한 회원이 있는지 대조 하는 등 최소한의 목적으로만 참고하도록 제공되는 정보
구성: 연계정보, 발급 시각, 사용자 동의 시 제공 가능 여부
카카오는 본인인증기관이 아니므로 카카오계정의 연계정보로 서비스에 필요한 본인 인증을 대신할 수 없는 점은 주의해야 한다

⚠️ 사용자 정보 가져오기를 통해 원하는 사용자 정보를 응답 값으로 받지 못했다면
1. 동의 항목에 해당 사용자 정보 동의 항목을 설정했는지 확인한다
- '필수 동의' 또는 '선택 동의'로 설정해야 사용자 정보를 받을 수 있다
- 반드시 필요한 정보는 수집 후 제공 옵션을 사용한다
2. {FIELD_NAME}_needs_agreement의 값 을 확인한다
- 만약email_needs_agreement 값이 "true"이면
- 추가 항목 동의 받기를 통해 사용자에게 필요한 동의 항목의 동의를 받으먼 된다

다른 API로 받는 사용자 정보

  • 배송지 정보 : 비즈니스로 설정해야 가능
  • 카카오톡 프로필
  • 카카오톡 친구목록
  • 카카오톡 채널 추가 상태 및 내역 : 비즈니스로 설정해야 가능
  • 카카오스토리 프로필
  • 카카오스토리 생일
  • 카카오스토리 프로필 URL

4. 로그아웃

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

카카오톡 로그아웃 기능은 카카오 API 이용에만 영향을 미치므로 서비스 회원 로그아웃은 자체 구현해야 한다

카카오톡 로그아웃 진행과정

  1. 사용자가 같은 카카오계정으로 여러 기기에 로그인한 상태라면

    • 로그아웃을 요청한 기기에서만 로그아웃된다
    • 동일한 카카오계정으로 로그인되어 있는 다른 기기에서는 로그아웃 처리되지 않는다
  2. 사용자가 같은 카카오계정으로 한 웹 브라우저에서 여러 서비스에 로그인한 상태라면

    • 로그아웃을 요청한 서비스에서만 로그아웃된다
    • 같은 웹 브라우저에 동일한 카카오계정으로 로그인되어 있는 다른 서비스에서는 로그아웃 처리되지 않는다

동시 로그아웃 처리

  1. 서비스 로그아웃 버튼을 통해 서비스와 카카오계정을 동시에 로그아웃 처리하고 싶다면 → 카카오계정과 함께 로그아웃하도록 하면 된다
  2. 사용자가 로그아웃 버튼을 눌러 로그아웃을 요청했을 때
    • 사용자를 연결 페이지로 이동시켜 서비스만 로그아웃할 것인지,
    • 카카오계정도 함께 로그아웃할 것인지 선택할 수 있다
  3. 기본적인 로그아웃 기능은 토큰 만료 방식으로 동작하지만, 이 기능을 사용하면
    • 요청한 서비스의 세션과 카카오 로그인의 세션을 만료하여
    • 서비스와 카카오 계정에서 로그아웃 처리된다

카카오계정과 함께 로그아웃 기능 구현순서

  1. 사용자가 로그아웃을 요청하고
  2. 리다이렉트될 Logout Redirect URI을 등록
  3. 서비스 서버에서 서비스 세션을 만료시킨다

카카오계정과 함께 로그아웃 기능 동작순서

  1. 사용자가 로그아웃 버튼을 눌러 연결 페이지로 진입
  2. 사용자가 '서비스만 로그아웃', '카카오계정과 함께 로그아웃' 중 원하는 로그아웃 처리를 선택한다
    • 서비스만 로그아웃을 선택 : 즉시 앱 정보에 등록된 Logout Redirect URI로 리다이렉트된다
    • 카카오계정과 함께 로그아웃을 선택 : 카카오계정 로그인 상태에 따라 다르게 동작한다
    • 카카오계정 세션이 있으면 만료시키고 앱정보에 등록된 Logout Redirect URI로 리다이렉트된다

리다이렉트된다말은 가볍게 해당하는 URL 페이지로 이동한다고 생각하면 될 것 같다
나중에 더 공부하기..!

카카오계정과 함께 로그아웃 기능은 REST API로 구현할 수 있다고 한다

5. 연결 & 연결 끊기

연결

  • 카카오계정의 서비스 이용 상태
  • 사용자가 서비스에 처음 로그인할 때 연결이 발생한다
  • 서비스는 토큰 기반의 API를, 사용자는 해당 서비스에서 카카오 API를 각각 이용할 수 있게 된다
  • 서비스와 사용자가 서로 연결되어 있지 않다면 카카오 API 관련 기능을 이용할 수 없다

연결 끊기

  • 카카오 로그인 시 카카오 플랫폼에서 처리하기 때문에 → 서비스에서 별도 API를 호출해 연결 요청할 필요가 없지만, 연결을 끊는 것은 서비스에서도 가능하다
  • 연결 끊기 API를 사용해 서비스와 사용자의 연결 상태를 해제할 수 있다
  • 사용자는 서비스를 이용하고자 카카오계정 정보를 제공한 것이기 때문에
    카카오 플랫폼 정책에 따라 사용자가 탈퇴하면 서비스에서 연결 끊기 처리를 해야 한다
  • 연결 끊기 : 사용자가 서비스에서 탈퇴하지 않아도 필요에 따라 호출할 수 있고 사용자가 직접 연결 끊기 요청을 할 수도 있다
  • 사용자가 직접 연결 끊기 요청한다면 → 카카오에서 서비스 서버에 알림을 보내 연결 끊기 및 사용자 정보 처리를 요청한다

연결 끊기는 카카오계정과 앱의 관계만 끊을 뿐,
서비스 서버에 저장된 회원 정보까지 지우지 않기 때문에
지우기를 원한다면 회원 탈퇴처리를 해야 한다

서비스 회원 가입 및 탈퇴

  • 각 서비스 회원 정보에 카카오계정 사용자 정보를 회원으로 저장하는 것
  • 연결과는 별개의 처리
  • 카카오계정으로 로그인한 사용자 정보를 서비스 서버에 회원 가입 처리하지 않으면 → 정상적인 가입 처리가 완료되지 않는다
  • 서비스 회원 탈퇴 또한 서비스가 자체적으로 구현해야 한다

6. 추가 항목 동의 받기

  • 사용자가 첫 카카오 로그인 시 동의 화면에서 동의하지 않았지만,
  • 서비스 이용 중 추가로 동의해야 하는 항목을 동의 요청하는 기능
  • 추가 항목 동의 받기 API를 통해 사용자가 특정 기능을 이용하려고 할 때 필요한 사용자 정보나 서비스 접근권한에 동의하도록 할 수 있다
  • 사용자가 카카오에도 제공을 거부한 정보(needs_agreement = false)는 카카오도 수집할 수 없다
    : 서비스에서 추가 항목 동의 받기 기능을 사용해도 카카오로부터 제공 받을 수 없으므로, 자체적으로 사용자로부터 수집해야 한다
  • 서비스 약관은 이 기능로도 추가 동의받을 수 없다
    : 운영 중 추가되는 약관은 자체 페이지를 통해 사용자로부터 동의받아야 한다
profile
새로운 것을 도전하고 노력한다

0개의 댓글