페이지 이동경로
  • 문서>
  • 카카오 로그인>
  • 활용하기

카카오 로그인

활용하기

이 문서는 카카오 로그인 관련 추가 정보를 안내합니다.

이 문서의 API와 필드 명칭은 REST API를 기준으로 설명합니다. 다른 개발 플랫폼 내 명칭은 일부 상이할 수 있으므로 해당 개발 문서의 내용을 참고합니다.

로그인

카카오 API 플랫폼에서 제공하는 로그인의 추가 정보를 안내합니다.

카카오계정 간편로그인

카카오 로그인 요청 시 브라우저에 카카오계정 간편로그인 정보가 있으면 계정 선택 화면을 표시하는 추가 기능입니다. 개발 플랫폼별 지원 여부와 개발 문서는 지원하는 기능에서 확인할 수 있습니다.

카카오계정 간편로그인 예시 화면
사용 안내
  1. 서비스가 인가 코드 받기 APIprompt 파라미터 값을 select_account으로 지정해 요청합니다.
  2. 이전에 브라우저로 카카오계정 로그인 페이지에서 [간편로그인 정보 저장]을 선택하고 로그인한 사용자에게 계정 선택 화면을 표시합니다.
  3. 사용자는 ID, 비밀번호 입력 없이 원하는 계정을 선택해 로그인할 수 있습니다.

카카오톡에서 자동 로그인

카카오 로그인으로 가입한 서비스 회원이 카카오톡 인앱브라우저로 서비스 페이지 진입 시, 로그인된 페이지로 바로 이동시키는 추가 기능입니다. 개발 플랫폼별 지원 여부와 개발 문서는 지원하는 기능에서 확인할 수 있습니다.

사용 안내
  1. 서비스는 사용자 브라우저 UserAgent 값의 KAKAOTALK 포함 여부를 확인해 사용자의 카카오톡 인앱브라우저 사용 여부를 확인합니다. 카카오톡에서 자동 로그인은 사용자의 브라우저가 카카오톡 인앱브라우저인 경우만 사용할 수 있습니다.
  2. 사용자의 브라우저가 카카오톡 인앱브라우저인 경우, 서비스는 인가 코드 받기 APIprompt 파라미터 값을 none으로 지정해 요청합니다.
  3. 서비스는 인가 코드 받기 API 응답으로 사용자의 회원 여부를 확인하고 아래 방법 중 하나로 분기 처리해야 합니다.
    • 인가 코드 응답: 카카오 로그인으로 가입한 서비스 회원, 받은 인가 코드로 토큰 받기 API를 요청해 로그인 완료 처리 후, 사용자에게 로그인된 상태의 서비스 페이지 표시
    • consent_required 에러 응답: 비회원, 사용자에게 로그인되지 않은 상태의 서비스 페이지 표시
참고: 카카오톡 인앱브라우저

카카오톡 인앱브라우저는 카카오톡 안에서 열리는 내장 브라우저로 UserAgent 값에 KAKAOTALK 문구를 포함합니다. (참고: User agent, User agent header)

브라우저 UserAgent 예시
Android 카카오톡 인앱브라우저 Mozilla/5.0 (Linux; Android 14; SM-S908N Build/UP1A.231005.007; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.134 Mobile Safari/537.36 KAKAOTALK/10.8.3 (INAPP)
iOS 카카오톡 인앱브라우저 Mozilla/5.0 (iPhone; CPU iPhone OS 17_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Safari/604.1 KAKAOTALK/10.8.2 (INAPP)

기존 로그인 여부와 상관없이 로그인

사용자 카카오계정의 서비스 로그인 여부에 상관없이 카카오계정 로그인 요청 페이지를 표시해 카카오계정으로 로그인을 요청하는 추가 기능입니다.

서비스가 인가 코드 받기 APIprompt 파라미터 값을 login으로 지정해 요청하면, 사용자는 인증부터 로그인 절차를 다시 수행해야 합니다. 개발 플랫폼별 지원 여부와 개발 문서는 지원하는 기능에서 확인할 수 있습니다.

카카오계정 가입 후 로그인

사용자에게 먼저 카카오계정 가입을 요청하고, 회원 가입을 완료하면 카카오 로그인을 요청하는 추가 기능입니다.

서비스가 인가 코드 받기 APIprompt 파라미터 값을 create으로 지정해 요청하면, 사용자에게 카카오계정 가입 페이지를 먼저 표시합니다. 회원 가입 완료 후 사용자에게 동의 화면으로 카카오 로그인을 요청합니다. 개발 플랫폼별 지원 여부와 개발 문서는 지원하는 기능에서 확인할 수 있습니다.

추가 항목 동의 받기

서비스가 원하는 시점에 사용자에게 동의하지 않은 동의항목인가 요청하는 추가 기능입니다. 개발 플랫폼별 지원 여부와 개발 문서는 지원하는 기능에서 확인할 수 있습니다.

아래 단계별 사용 안내를 참고합니다.

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

서비스는 추가 항목 동의 받기 API가 필요한 동의항목을 아래 방법으로 확인할 수 있습니다.

  • 동의 내역 확인하기 API 응답 중 scopes 내 각 동의항목별 agreed 값으로 사용자 동의 여부 확인, false인 경우 추가 동의 필요
  • -402 에러 코드가 포함된 API 응답의 required_scopes 필드 확인, 해당 필드내 항목 추가 동의 필요
예제: 동의 내역 확인하기 API 응답 확인
{
    "id": "${USER_ID}",
    "scopes": [ // 필요한 동의항목 목록과 대조
        {
            "id": "profile",
            ...
            "agreed": true, // 사용자 동의 여부 확인
            ...
        },
        ...
    ]
}
예제: 402 에러 코드 포함 응답 확인
HTTP/1.1 403 Forbidden
{
    "msg": "insufficient scopes.",
    "code": -402,
    "api_type": "TALK_MEMO_DEFAULT_SEND",
    "required_scopes": [
        "talk_message" // 동의항목(카카오톡 메시지 전송)에 사용자 동의 필요
    ],
    "allowed_scopes": [
        "profile",
        "account_email"
    ]
}
2. 추가 항목 동의 받기

서비스는 인가 코드 받기 APIscope 파라미터에 동의항목 ID를 지정해 요청합니다. 동의항목 ID는 [내 애플리케이션] > [카카오 로그인] > [동의항목] 메뉴의 각 동의항목 [ID], 또는 -402 에러 응답의 required_scopes 값을 사용합니다. 인가 코드 받기 API의 scope 파라미터의 내용을 함께 확인합니다.

3. 결과 확인 후 서비스 제공

서비스가 추가 항목 동의 받기 API를 요청하면, 사용자는 필요한 동의항목에 동의하거나 동의하지 않고 취소 버튼을 눌러 동의 화면을 닫을 수 있습니다. 아래 사용자 동의 여부별 처리 방법을 참고해 서비스를 제공합니다.

  • 사용자가 동의항목에 동의한 경우
    1. 추가 항목 동의 받기 API 요청이 성공하고, 인가 코드가 발급됩니다.
    2. 발급받은 인가 코드로 토큰 받기 API를 요청 후, 응답의 scope 값으로 필요한 동의항목의 동의 여부를 확인합니다.
    3. 사용자가 원하는 동의항목에 동의한 경우, 새로 발급받은 토큰으로 필요한 카카오 API를 요청합니다.
  • 사용자가 취소한 경우
    1. 추가 항목 동의 받기 요청이 실패하고, access_denied 에러 응답이 반환됩니다.
    2. 사용자에게 서비스 이용을 위한 동의가 필요함을 안내 후, 재요청 또는 예외 처리(예: 이전 화면으로 이동)합니다.
예제: 토큰 받기 응답 확인
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
    "token_type": "bearer",
    "access_token": "${ACCESS_TOKEN}",
    "expires_in": 43199,
    "refresh_token": "${REFRESH_TOKEN}",
    "refresh_token_expires_in": 5184000,
    "scope": "account_email profile" // 사용자가 동의한 동의항목 정보
}
인가 코드 받기 API의 scope 파라미터

카카오 로그인의 인가 코드 받기 API는 서비스에서 매번 동의항목을 지정할 필요가 없도록, scope 파라미터 미포함 요청 시 앱에 설정된 동의항목 ID를 해당 파라미터의 기본값으로 적용합니다.

하지만, 추가 항목 동의 받기 API(scope 파라미터를 포함한 인가 코드 받기 API)는 기본값을 적용할 수 없기 때문에 동의항목 ID를 직접 지정해야 합니다. 이 경우, OpenID Connect를 활성화한 앱은 scope 파라미터의 값에 openid를 포함해야 토큰 받기 API 요청 시 ID 토큰을 발급받을 수 있습니다.

아래 OpenID Connect 활성화와 scope 파라미터 포함 여부에 따른 카카오 로그인 동작 표를 참고합니다.

scope 파라미터 동의화면 OpenID Connect 활성화 앱의 토큰 발급
미포함 앱에 [필수 동의] 또는 [선택 동의]로 설정된 동의항목으로 구성된 동의 화면 표시 토큰 받기 요청 시 별도의 조치 없이 ID 토큰 발급
포함 scope 파라미터에 포함한 동의항목만으로 구성된 동의 화면 표시 scope 파라미터에 openid 값을 포함해야 토큰 받기 요청 시 ID 토큰 발급

로그인 힌트 주기

카카오 로그인 요청 시 전달한 ID 값을 카카오계정 로그인 페이지에 자동 입력해 기존 사용자가 쉽게 다시 로그인 할 수 있도록 돕는 추가 기능입니다.

서비스가 인가 코드 받기 APIlogin_hint 파라미터 값을 ID 항목에 자동 입력할 값으로 지정해 요청하면, 카카오계정 로그인 페이지에 해당 값이 자동 입력됩니다. 로그인하지 않은 사용자에게 카카오계정 로그인 페이지를 표시하는 상황에서만 동작합니다. 개발 플랫폼별 지원 여부와 개발 문서는 지원하는 기능에서 확인할 수 있습니다.

간편가입

카카오싱크를 도입한 서비스만 사용할 수 있는 기능입니다.

카카오 로그인 동의 화면에 서비스 약관동의항목을 함께 인가 요청하는 추가 기능입니다.

서비스가 간편가입을 사용 설정하면, 사용자는 카카오 로그인 동의 화면에서 동의항목과 서비스 약관에 한 번에 동의하고, 별도의 정보 입력 없이 서비스에 가입할 수 있습니다.

설정 방법은 설정하기에서, 플랫폼별 사용 방법은 카카오싱크 시작하기개발 문서에서 확인할 수 있습니다.

주의: 서비스 약관

서비스 약관은 카카오가 아닌 서비스에 대한 사용자 의사표시를 위한 것으로, 관리와 사용에 대한 모든 책임은 서비스에 있습니다. 관련 피해가 발생하지 않도록 서비스 약관 운용을 반드시 확인하고 준수해야 합니다.

서비스 약관 선택해 동의받기

간편가입을 활성화한 서비스만 사용할 수 있는 기능입니다.

서비스 앱에 등록한 서비스 약관을 사용자에게 인가 요청하는 추가 기능입니다. 사용자가 특정 서비스 약관 동의해야 하는 경우 사용할 수 있습니다. 개발 플랫폼별 지원 여부와 개발 문서는 지원하는 기능에서 확인할 수 있습니다.

사용 안내
  1. 서비스는 서비스 약관 등록을 참고해 동의 필요 서비스 약관을 등록합니다. 서비스 약관 운용을 준수해야 합니다.
  2. 서비스가 인가 코드 받기 APIservice_terms 파라미터에 동의받을 서비스 약관 태그를 지정해 요청합니다. [필수 동의]로 설정된 서비스 약관을 하나 이상 지정해야 합니다.
  3. 사용자는 동의 화면에서 서비스가 지정한 서비스 약관에 동의 후 회원으로 가입합니다.

OpenID Connect ID 토큰 발급받기

OpenID Connect를 활성화한 서비스만 사용할 수 있는 기능입니다.

서비스가 로그인 세션 대신 사용 가능한 ID 토큰을 발급하는 추가 기능입니다.

OpenID Connect를 활성화한 서비스는 별도의 추가 파라미터 없이 토큰 받기 API 요청으로 ID 토큰을 발급받을 수 있습니다. ID 토큰 재생 공격을 방지하기 위한 nonce 파라미터를 함께 사용할 것을 권장합니다. (참고: 보안을 위한 파라미터)

설정 방법은 설정하기에서 확인할 수 있습니다.

연결

카카오 API 플랫폼에서 제공하는 연결의 추가 정보를 안내합니다.

연결된 서비스 관리

카카오 API 플랫폼은 사용자가 연결된 앱 정보 확인, 연결 끊기, [선택 동의] 동의항목동의 철회를 직접 할 수 있는 연결된 서비스 관리 기능을 제공합니다. 사용자는 아래 경로에서 연결된 서비스 관리에 접근할 수 있습니다.

  • 카카오톡의 [더보기] > [설정] > [카카오계정] > [연결된 서비스 관리]
  • [카카오계정 페이지] > [계정 이용] > [연결된 서비스 관리] (참고: 카카오계정 페이지)
연결된 서비스 관리

수동 연결

자동 연결 기능을 사용하지 않도록 설정한 서비스에서 원하는 시점에 사용자와 앱을 수동으로 연결하는 기능입니다. 개발 문서는 고급: 연결하기에서 확인할 수 있습니다.

수동 연결을 사용하는 서비스는 사용자의 서비스 가입 상태와 앱 연결 상태가 서로 일치하는지 확인하고 직접 연결하기, 연결 끊기 API로 연결 상태를 관리해야 합니다. 불가피한 경우가 아니라면 기본 설정인 자동 연결 사용을 권장합니다.

참고: 서비스에서 수동 연결이 필요한 경우
  • 사용자가 카카오 로그인을 완료해도 바로 서비스 가입이 완료되지 않는 경우
    • 서비스 가입에 정보 입력이나 인증과 같은 추가 가입 절차 필요
    • 서비스 가입을 일정 주기로 승인
  • 서비스 가입 상태와 카카오디벨로퍼스 앱 연결 상태를 동일하게 관리하고 싶은 경우
    • 사용자 로그인 수단으로 카카오 로그인만 도입해 사용 중인 서비스
  • 이 외, 서비스에서 사용자의 앱 연결 상태를 직접 관리해야 할 필요가 있는 경우
사용 안내
  1. 자동 연결 사용 여부는 [내 애플리케이션] > [카카오 로그인] > [로그인 시 앱 자동 연결] 설정의 노출 여부로 확인할 수 있습니다.
    • 노출 안 됨: 자동 연결 사용 중 앱, 수동 연결 기능 필요 시 데브톡 문의로 권한 획득 필요
    • 노출 됨: 자동 연결 사용 여부 설정 가능
  2. [로그인 시 앱 자동 연결]을 [사용 안함]으로 설정 후 연결 필요 시점에 고급: 연결하기 API 요청

로그아웃

카카오 API 플랫폼에서 제공하는 로그아웃의 추가 정보를 안내합니다.

카카오계정과 함께 로그아웃

사용자가 서비스에서 로그아웃 요청 시 서비스만 로그아웃할 것인지, 또는 카카오계정도 함께 로그아웃할 것인지 선택 가능한 화면을 제공하는 추가 기능입니다. 설정 방법은 Logout Redirect URI 등록에서, 개발 플랫폼별 지원 여부와 개발 문서는 지원하는 기능에서 확인할 수 있습니다.

카카오계정과 함께 로그아웃 화면
사용 안내
  1. 서비스가 카카오계정과 함께 로그아웃을 요청하면 사용자는 로그아웃 선택 페이지로 이동합니다.
  2. 사용자가 [이 서비스만 로그아웃], [카카오계정과 함께 로그아웃] 중 원하는 항목을 선택합니다. 아래는 선택 항목별 동작 설명입니다.
    • [이 서비스만 로그아웃]: 앱 정보에 등록된 서비스의 Logout Redirect URI로 사용자 리다이렉트 처리
    • [카카오계정과 함께 로그아웃]: 사용자의 카카오계정 로그인 세션이 있으면 해당 세션을 만료한 후, 없으면 즉시 앱 정보에 등록된 Logout Redirect URI로 사용자 리다이렉트 처리
로그아웃 방식별 차이점
항목 로그아웃 카카오계정과 함께 로그아웃
로그아웃 호출 앱의 토큰 만료 만료
웹 브라우저의 카카오계정 로그인 세션 유지 만료
특징 서비스 로그아웃과 별도로 사용자가 카카오계정 로그아웃 수행 필요 카카오계정 로그아웃 후 서비스 로그아웃 페이지로 리다이렉트(Redirect) 처리

동의항목

카카오 API 플랫폼의 사용자 동의 필요 정보 또는 접근권한 필요 기능에 대응하는 항목입니다. 서비스는 동의항목으로 사용자에게 인가를 요청할 수 있습니다.

카카오 API 플랫폼은 서비스가 설정한 동의항목으로 동의 화면을 구성해 로그인 시 사용자에게 인가를 요청하고, 사용자가 동의한 자원을 서비스에 제공합니다. 회원 체계가 없거나 사용자 정보를 활용하지 않는 서비스는, 동의항목을 설정하지 않아도 됩니다. 앱에 설정된 동의항목이 없는 경우, 카카오 로그인 동의 화면은 서비스의 앱과 사용자의 연결에 대한 안내만 포함합니다.

서비스 앱에 동의항목을 설정하는 방법은 설정하기를 참고합니다.

추가 항목 동의 받기

서비스 운영 중 추가 설정한 동의항목이거나, 사용자가 카카오 로그인 및 서비스 가입 시 동의하지 않은 동의항목이라도 추가 항목 동의 받기 API로 동의받을 수 있습니다.

동의 단계

사용자에게 인가를 요청할 동의항목의 동의 요청 수준을 조정할 수 있는 설정입니다. 아래 표에서 자세한 내용을 확인합니다.

동의 단계 설명
필수 동의 동의 화면에서 사용자가 동의항목에 반드시 동의해야 합니다. 사용자가 동의하지 않으면 카카오 로그인을 완료할 수 없습니다.
필수 동의 설정 권한을 획득하면 선택 동의, 이용 중 동의 설정 권한도 함께 획득합니다.
선택 동의 동의화면에서 사용자가 동의항목에 선택적으로 동의할 수 있습니다. 사용자가 동의하지 않아도 카카오 로그인을 완료할 수 있습니다.
사용자가 동의하지 않은 경우, 필요한 시점에 추가 항목 동의 받기 API로 다시 동의를 요청할 수 있습니다.
이용 중 동의 동의화면에서 사용자에게 동의항목의 동의를 요청하지 않습니다. 서비스에서 자원이 필요한 시점에 추가 항목 동의 받기 API로 동의를 요청해야 합니다.
서비스의 특정 기능에만 필요한 자원에 설정합니다.
동의 단계 설정 권한

권한이 필요한 동의항목은 앱 권한 신청으로 권한을 받아야 [필수 동의], [선택 동의] 또는 [이용 중 동의] 동의 단계로 설정할 수 있습니다. 일부 항목은 카카오싱크 도입 후 설정할 수 있습니다. 카카오싱크의 설명과 도입 안내는 시작하기를 참고합니다.

개인정보 동의항목

서비스가 카카오 API 플랫폼에서 특정 사용자 동의 필요 정보를 제공받기 위해 앱에 설정해야 하는 동의항목 목록입니다. 서비스 앱에 동의항목을 설정하는 방법은 설정하기를 참고합니다.

이름(ID) 설명 지원 동의 단계와 필요 권한 관련 API
닉네임
(profile_nickname)
카카오계정 프로필 닉네임 [필수, 선택, 이용 중 동의]: 기본 제공 사용자 정보 가져오기
카카오톡 프로필 가져오기
프로필 사진
(profile_image)
카카오계정 프로필 사진

구성: 카카오계정 프로필 사진 URL, 썸네일 이미지 URL
[필수, 선택, 이용 중 동의]: 기본 제공 사용자 정보 가져오기
카카오톡 프로필 가져오기
카카오계정(이메일)
(account_email)
카카오계정 대표 이메일
서비스에서 참고할 수 있는 이메일 인증 여부 제공

구성: 대표 이메일, 이메일 인증 여부, 이메일 유효 여부, 사용자 동의 시 정보 제공 가능 여부
중요: 이메일 사용 시 주의 사항
[필수, 선택, 이용 중 동의]: 비즈 앱, 테스트 앱 사용자 정보 가져오기
이름
(name)
카카오계정 이름 [필수, 선택, 이용 중 동의]: 동의 단계 설정 권한, 테스트 앱 사용자 정보 가져오기
성별
(gender)
카카오계정의 성별

구성: 성별, 사용자 동의 시 정보 제공 가능 여부
[필수, 선택, 이용 중 동의]: 동의 단계 설정 권한, 테스트 앱 사용자 정보 가져오기
연령대
(age_range)
카카오계정의 연령대, 한국 나이 기준
14세 미만, 14세 이상, 20대, 30대 등 대략적인 나이

구성: 연령대, 사용자 동의 시 정보 제공 가능 여부
[필수, 선택, 이용 중 동의]: 동의 단계 설정 권한, 테스트 앱 사용자 정보 가져오기
생일
(birthday)
카카오계정의 생일

구성: 생일, 사용자 동의 시 정보 제공 가능 여부
[필수, 선택, 이용 중 동의]: 동의 단계 설정 권한, 테스트 앱 사용자 정보 가져오기
출생 연도
(birthyear)
카카오계정의 출생 연도

구성: 태어난 해, 사용자 동의 시 정보 제공 가능 여부
[필수, 선택, 이용 중 동의]: 동의 단계 설정 권한, 테스트 앱 사용자 정보 가져오기
카카오계정(전화번호)
(phone_number)
카카오계정과 연결된 카카오톡에 등록된 전화번호

구성: 카카오톡 전화번호, 사용자 동의 시 정보 제공 가능 여부
주의: 카카오계정으로 수집 후 제공 설정 불가능
[필수, 선택, 이용 중 동의]: 동의 단계 설정 권한, 테스트 앱 사용자 정보 가져오기
CI(연계정보)
(account_ci)
카카오계정의 암호화된 이용자 확인 값
기존 회원과 대조 등 최소 목적의 참고용으로 제공

구성: 연계정보, 발급 시각, 사용자 동의 시 정보 제공 가능 여부
주의: 카카오는 본인인증기관이 아니므로 카카오계정의 연계정보로 서비스의 본인 인증을 대신할 수 없음
[필수, 선택, 이용 중 동의]: 동의 단계 설정 권한 사용자 정보 가져오기
카카오 서비스 내
친구목록(프로필사진, 닉네임, 즐겨찾기 포함)
(friends)
카카오계정의 카카오톡 친구 정보 목록

구성: 친구 정보, 친구 수
[필수 동의]: 설정 불가
[선택 동의]: 사용 권한 신청
[이용 중 동의]: 제한된 기능 제공, 사용 권한 신청
카카오톡 친구 목록 가져오기
카카오톡 채널 추가
상태 및 내역
(plusfriends)
사용자와 서비스 앱에 연결된 카카오톡 채널의 친구 관계

구성: 채널 관계, 채널 추가 시간, 채널 수정 시간
[필수 동의]: 카카오톡 채널 연결 카카오톡 채널 관계 확인하기
배송지정보(수령인명,
배송지 주소, 전화번호)
(shipping_address)
카카오계정의 배송지 정보

구성: 수령인 이름, 수령인 연락처, 주소, 주소 유형, 우편번호
[필수, 선택, 이용 중 동의]: 동의 단계 설정 권한, 테스트 앱 배송지(REST API, JavaScript, Android, iOS, Flutter)
카카오계정 상태 변경 내역
(openid_sse)
사용자의 계정 상태 변경 이벤트 중 CAEP, RISC 카테고리 이벤트 발생 시 정보 제공

구성: 변경 이벤트 정보
[필수 동의]: 설정 불가
[선택 동의]: 동의항목 설정
[이용 중 동의]: 동의항목 설정

중요: OAUTH, KAKAO 카테고리 이벤트는 불필요
계정 상태 변경 웹훅

* 프로필 정보(닉네임/프로필 사진): Deprecated, [닉네임]과 [프로필 사진]으로 분리하여 제공, 공지 참고

접근권한 동의항목

서비스에서 카카오 API 플랫폼의 특정 접근권한 필요 기능을 사용하기 위해 앱에 설정해야 하는 동의항목 목록입니다.

이름(ID) 지원 동의 단계와 필요 권한 관련 API
카카오톡 메시지 전송
(talk_message)
[필수 동의]: 설정 불가
[선택, 이용 중 동의]: 제한된 기능 제공, 사용 권한 신청
카카오톡 메시지
톡캘린더 및 일정 생성, 조회, 편집/삭제
(talk_calendar)
[필수 동의]: 설정 불가
[선택 동의]: 사용 권한 신청
[이용 중 동의]: 제한된 기능 제공, 사용 권한 신청
톡캘린더
톡캘린더 내 할 일 생성, 조회, 편집/삭제
(talk_calendar_task)
[필수 동의]: 설정 불가
[선택 동의]: 사용 권한 신청
[이용 중 동의]: 제한된 기능 제공, 사용 권한 신청
톡캘린더
참고: 제한된 기능 제공

권한 획득 전, 아래 중 하나 이상의 기능 제한이 적용되는 동의항목입니다.

  • 앱의 팀원 대상으로만 기능 동작
  • 쿼터 제한

기능이 제한된 동의항목을 적용한 서비스는 아래 절차를 거쳐 모든 사용자를 대상으로 제공할 수 있습니다.

  1. 기능이 제한된 동의 단계를 설정 후 팀원을 대상으로 서비스 구현
  2. 카카오 API 플랫폼에 해당 동의항목의 사용 권한 신청
  3. 사용 권한 획득 후 원하는 동의 단계의 동의항목을 서비스 앱에 설정
  4. 모든 사용자 대상으로 서비스 제공
참고: 테스트 앱

테스트 앱(테스트 애플리케이션) 용으로 제공하는 동의 단계 설정 권한입니다.

테스트 앱은 실제 서비스에 사용 중인 앱에 영향을 미치지 않고 신규 기능이나 업데이트를 개발하기 위해 사용하며, 테스트 앱용 권한을 검수 신청 전에 활용할 수 있습니다. 자세한 내용은 테스트 앱을 참고합니다.

사용자 동의

카카오 API 플랫폼은 사용자가 동의하지 않은 동의항목에 해당하는 자원은 제공하지 않으며 에러 응답을 반환합니다. 에러 발생 시 추가 항목 동의 받기로 사용자에게 동의받아야 합니다. 서비스에 반드시 필요한 자원은 해당 동의항목을 [필수 동의]로 설정하고 카카오계정으로 수집 후 제공 설정을 사용하거나, 자원을 제공받지 못한 경우에 대한 예외 처리를 해야 합니다.

주의: 사용자 동의 시 정보 제공 가능 여부

카카오 API 플랫폼이 보유하고 있지 않거나 수집할 수 없는 사용자 정보는, 사용자가 동의한 경우에도 서비스에 제공하지 못할 수 있습니다. 자세한 내용은 사용자 동의 시 정보 제공 가능 여부를 참고합니다.

카카오계정으로 수집 후 제공

카카오계정에 없는 사용자 동의 필요 정보를 사용자에게 동의 화면으로 제3자 제공 동의를 받은 후, 수집해 서비스에 제공하는 추가 기능입니다. 설정 방법은 설정하기에서 확인할 수 있습니다.

동의 단계별 동작
  • [필수 동의]
    • 카카오 로그인 과정에서 정보 수집 후 제공
  • [선택 동의], [이용 중 동의]
설정 불가 항목
  • [카카오계정(전화번호)]
    • 해당 정보는 사용자 카카오계정에 연결된 카카오톡의 전화번호이기 때문에, 카카오톡 미사용자인 경우 수집 불가
  • [프로필(닉네임/프로필 사진)], [닉네임], [프로필 사진]
    • 카카오계정 로그인 시 필수 입력 항목으로 항상 제공

동의 철회

사용자는 카카오계정 페이지의 [계정 이용]이나 카카오톡의 [설정] > [카카오계정] > [연결된 서비스 관리] 메뉴에서 선택 동의항목에 대한 동의를 철회할 수 있습니다. 이때 동의 철회하기 API가 호출되며, 서비스에서도 해당 API를 요청해 사용자 동의를 철회할 수 있습니다. (참고: 연결된 서비스 관리)

개발 플랫폼별 지원 여부와 개발 문서는 지원하는 기능에서 확인할 수 있습니다.

사용자 정보

카카오 API 플랫폼에서 서비스에 제공하는 사용자 정보에 대해 안내합니다. 제공하지 않는 정보는 서비스가 직접 수집해야 합니다.

주의: 사용자 정보 관리

카카오 API 플랫폼을 이용하는 모든 서비스는 안전하게 보호하고 관리해야 합니다. 사용자 정보 관리에서 자세한 내용을 확인합니다.

기본 제공 정보

사용자 동의 없이도 서비스에 기본으로 제공하는 정보입니다. 사용자 정보 가져오기 API의 응답으로 제공합니다.

사용자 정보 설명
회원번호 각 서비스 앱 내 사용자 고유 ID, 카카오계정과 서비스 앱 연결 시 부여
카카오 API 호출 시 사용자 식별자로 사용 권장
연결 시각 사용자가 서비스 앱에 연결된 시각
간편가입 시각 사용자가 서비스 앱에 간편가입으로 처음 로그인한 시각
간편가입 사용자만 제공하며 연결 시각과 동일
사용자 프로퍼티 사용자 정보 저장하기 API로 카카오 API 플랫폼에 저장한 사용자 정보
사용자 프로퍼티

서비스가 사용자별 정보를 사용자 정보 저장하기 API로 카카오 API 플랫폼에 저장하는 기능입니다. 서비스는 사용자 정보 가져오기 API로 저장한 정보를 응답받을 수 있습니다. 설정 방법은 설정하기에서, 개발 플랫폼별 지원 여부와 개발 문서는 지원하는 기능에서 확인할 수 있습니다.

사용자 동의 필요 정보

대응하는 동의항목인가받은 서비스에 제공하는 정보입니다. 개인정보 동의항목에서 전체 목록과 자세한 내용을 확인할 수 있습니다.

배송지

사용자 동의 필요 정보 중 하나인 배송지에 대해 안내합니다.

카카오 API 플랫폼은 카카오 로그인한 사용자의 카카오계정에 등록된 배송지 정보를 제공합니다. Kakao SDK(JavaScript, Android, iOS, Flutter) 또는 REST API로 요청할 수 있습니다. 개발 플랫폼별 지원 여부와 개발 문서는 지원하는 기능에서 확인할 수 있습니다.

아래 개발 플랫폼별 세부 내용을 확인합니다.

개발 플랫폼 설명
REST API 배송지 가져오기 API로 사용자의 전체 배송지 목록, 또는 특정 배송지 정보 제공
서비스는 사용자가 배송지 목록 중 하나를 선택할 수 있는 사용자 인터페이스(User Interface, UI)를 직접 구현 필요
Kakao SDK 배송지 가져오기 API와 함께 배송지 선택하기 API 추가 제공
배송지 선택하기 API 사용 시, 배송지 피커로 사용자가 서비스에 제공할 배송지를 선택할 수 있음
서비스는 특정 배송지 1건만 제공받아, 개인정보 취급을 최소화하고 UI 처리를 간소화할 수 있음
배송지 피커
Kakao SDK로 배송지 피커 사용 안내

Kakao SDK 사용 시, 배송지 피커를 활용한 배송지 요청 순서는 아래 시퀀스 다이어그램을 참고합니다.

배송지 조회 과정 시퀀스다이어그램
  1. 사용자가 서비스 페이지에서 [배송지 선택]을 선택합니다.
  2. 서비스가 배송지 선택하기 API를 호출합니다.
  3. 사용자에게 배송지 피커가 표시됩니다.
  4. 사용자 카카오계정에 등록된 배송지의 유무에 따라, 사용자가 아래 중 한 가지 방법으로 배송지를 선택합니다.
    • 등록된 배송지 없음: 배송지 수집에 동의하고 새로운 배송지 입력, 새로 입력한 배송지가 자동 선택됨
    • 등록된 배송지 있음: 서비스에 제공할 배송지 직접 선택
  5. 서비스에 배송지 선택하기 API의 응답으로 선택된 배송지의 ID가 반환됩니다.
  6. 서비스가 배송지 ID로 배송지 가져오기 API를 요청합니다.
  7. 서비스에 배송지 가져오기 API의 응답으로 해당 배송지 상세 정보가 반환됩니다.
  8. 서비스는 사용자가 선택한 배송지 상세 정보를 표시합니다.

위 과정 중 발생하는 에러의 해결 방법은 문제 해결을 참고합니다.

참고: 전체 배송지 목록

배송지 가져오기 요청 시 배송지 ID를 지정하지 않으면 사용자의 전체 배송지를 제공받을 수 있습니다. 이 경우, 응답으로 받은 여러 배송지를 서비스 UI에 목록 형태로 표시하고 사용자가 선택할 수 있도록 하는 기능 구현이 필요합니다.

사용자 동의 시 정보 제공 가능 여부

카카오 API 플랫폼은 사용자 정보가 포함된 API 응답에, 사용자 동의 시 해당 정보의 제공 가능 여부 필드를 함께 제공합니다.

사용자 정보의 응답 필드명이 ${FIELD_NAME}인 경우 제공 가능 여부 응답의 필드명은 ${FIELD_NAME}_needs_agreement입니다. 아래 제공 가능 여부 응답별 세부 내용을 참고합니다.

  • true: 사용자 동의가 필요한 정보
  • false: 사용자 동의가 필요 없는 정보
    • API 성공 응답에 ${FIELD_NAME} 항목이 존재하는 경우: 이미 제공 중인 정보
    • API 성공 응답에 ${FIELD_NAME} 항목이 없는 경우: 카카오 API 플랫폼에서 제공 불가능한 정보로 서비스에서 자체 수집 필요
    • 카카오계정에 없는 사용자 정보의 동의항목에 카카오계정으로 수집 후 제공 옵션을 선택하지 않은 경우: 옵션 선택 시 사용자 동의 및 수집 후 제공 가능
예제: 이메일 동의항목에 추가 항목 동의 받기 필요
HTTP/1.1 200 OK
{
    ...
    "kakao_account": {
        ...
        "email_needs_agreement": true    // 이메일 동의항목에 사용자 동의 필요
        ...
    }
}

OpenID Connect

카카오 로그인은 OAuth 2.0 기반의 표준 인증 프로토콜인 OpenID Connect(OIDC)를 지원합니다. OIDC를 서비스에 적용하면 사용자의 로그인을 더 안전하게 처리할 수 있습니다. 설정 방법은 설정하기에서, 플랫폼별 지원 여부와 개발 문서는 지원하는 기능에서 확인할 수 있습니다.

아래 OpenID Connect(OIDC)를 적용한 카카오 로그인 구현 방법을 참고합니다.

1. 메타데이터 확인하기

OIDC: 메타데이터 확인하기 API로 카카오 로그인의 OpenID Connect 서비스 제공자 메타데이터(Metadata)를 확인합니다. 카카오 API 플랫폼은 메타데이터 문서로 OpenID Connect Discovery 표준 규격을 준수한 서비스 제공자 설정을 제공합니다.

2. 카카오 로그인 구현하기

OpenID Connect 활성화 설정을 참고해 [내 애플리케이션] > [카카오 로그인]에서 [OpenID Connect]를 활성화 후, 각 플랫폼 개발 문서를 참고하여 카카오 로그인을 구현합니다.

OpenID Connect를 활성화한 앱은 사용자 인증 정보가 담긴 ID 토큰을 액세스 토큰과 함께 발급받고, OIDC: 사용자 정보 가져오기표준 규격을 준수한 형태의 사용자 정보를 제공받을 수 있습니다.

3. ID 토큰 유효성 검증하기

발급받은 ID 토큰은 서비스 보안을 위해 유효성을 검증하고 사용해야 합니다. 페이로드 값 확인 시, 필요에 따라 ID 토큰 정보 보기 API를 사용해 디버깅할 수 있습니다. 아래 순서로 ID 토큰을 검증합니다.

  • 페이로드 검증

    1. ID 토큰의 영역 구분자인 온점(.)을 기준으로 헤더, 페이로드, 서명을 분리
    2. 페이로드를 Base64 방식으로 디코딩
    3. 페이로드의 키별 값 검증
      • iss: https://kauth.kakao.com와 일치해야 함
      • aud: 서비스 앱 키와 일치해야 함
      • exp: 현재 UNIX 타임스탬프(Timestamp)보다 큰 값 필요(ID 토큰의 만료 여부 확인)
      • nonce: 카카오 로그인 요청 시 전달한 값과 일치해야 함
  • 서명 검증

    1. ID 토큰의 영역 구분자인 온점(.)을 기준으로 헤더, 페이로드, 서명을 분리
    2. 헤더를 Base64 방식으로 디코딩
    3. OIDC: 공개키 목록 조회하기 API로 카카오 인증 서버가 서명 시 사용하는 공개키 목록 조회
    4. 공개키 목록에서 헤더의 kid에 해당하는 공개키 값 확인
      • 공개키는 일정 기간 캐싱(Caching)하여 사용할 것을 권장하며, 지나치게 빈번한 요청 시 요청이 차단될 수 있으므로 유의
    5. JWT 서명 검증을 지원하는 라이브러리를 사용해 공개키로 서명 검증
      • 참고: OpenID Foundation, jwt.io
      • 라이브러리를 사용하지 않고 직접 서명 검증 구현 시, RFC7515 규격에 따라 서명 검증 가능

ID 토큰

ID 토큰은 서비스의 로그인 세션 대신 사용할 수 있는 JWT(JSON Web Token) 형식의 토큰입니다. 서비스는 ID 토큰의 유효성을 먼저 검증한 후, 토큰에 포함된 사용자 인증 정보를 서비스에 활용할 수 있습니다. ID 토큰의 만료 시간은 액세스 토큰과 동일합니다.

ID 토큰은 아래 세 가지 세그먼트(Segment)로 구성됩니다.

구분 설명
헤더(Header) ID 토큰의 규격 정보
카카오 로그인으로 발급받는 ID 토큰의 헤더는 아래 정보를 포함함
alg: ID 토큰에 적용된 암호화 방식, RS256으로 고정
typ: ID 토큰의 형식, JWT로 고정
kid: ID 토큰 암호화 시 사용된 공개키 ID, OIDC: 공개키 목록 조회하기 API로 ID 토큰별로 사용된 공개키의 값을 확인할 때 필요한 정보
페이로드(Payload) 사용자 인증 정보
iss: ID 토큰을 발급한 인증 기관 정보, https://kauth.kakao.com으로 고정
aud: ID 토큰을 발급한 앱의 앱 키
sub: ID 토큰에 해당하는 사용자의 회원번호
iat: ID 토큰 발급 또는 갱신 시각
auth_time: 사용자가 카카오 로그인으로 인증을 완료한 시각
exp: 만료 시간
nonce: 카카오 로그인 요청 시 전달받은 임의의 문자열
nickname: 카카오계정의 사용자 닉네임
picture: 카카오계정의 사용자 프로필 사진
email: 카카오계정의 사용자 이메일
nickname, picture, email 값 제공은 동의항목 설정 및 사용자 동의 필요
자세한 정보는 인가 코드 받기 API 요청과 토큰 받기 API 응답 참고
서명(Signature) 카카오 인증 서버에서 kid에 해당하는 공개키로 서명한 값
RS256 방식으로 암호화된 값으로, ID 토큰 유효성 검증 시 서명

ID 토큰은 세 영역의 값을 Base64 인코딩(Encoding) 한 후 온점(.)으로 이어 붙인 하나의 문자열로 생성됩니다. 따라서 온점을 기준으로 각 영역을 분리하고, Base64 디코딩(Decoding)하여 내용을 확인할 수 있습니다. 페이로드와 서명의 검증 방법은 ID 토큰 유효성 검증하기에서 확인할 수 있습니다.

주의: 추가 항목 동의 받기 요청 시 ID 토큰 발급

ID 토큰은 OpenID Connect를 활성화한 상태에서 카카오 로그인 시 별도의 파라미터 없이 발급됩니다. 하지만, 추가 항목 동의 받기 API 요청 시에는 scope 파라미터에 openid 값을 전달한 경우에만 ID 토큰을 발급받을 수 있습니다. 인가 코드 받기 API의 scope 파라미터를 참고합니다.

웹훅

연결 끊기 웹훅

사용자가 아래의 경우로 서비스와 연결 끊기 발생 시, 발생 사실을 서비스 서버에 실시간으로 전달하는 기능입니다.

서비스에서 직접 연결 끊기 API를 요청한 경우는 웹훅을 전송하지 않습니다.

사용 안내
  1. 사용자가 서비스와 연결 끊기를 요청합니다.
  2. 카카오 API 플랫폼은 연결 끊기 요청을 처리한 후, 연결 끊기 웹훅을 서비스에게 전달합니다.
  3. 서비스에서도 회원 탈퇴 시 정보 파기를 포함한 개인정보 처리방침에 따른 조치와 회원 탈퇴 처리 후, 카카오 API 플랫폼 서버로 응답해야 합니다.

설정 방법은 설정하기에서, 개발 문서는 연결 끊기 웹훅에서 확인할 수 있습니다.

계정 상태 변경 웹훅

사용자의 카카오계정 상태가 변경되면, 해당 정보를 서비스에 실시간으로 전달하는 기능입니다. 아래는 웹훅으로 제공하는 주요 변경 정보입니다.

  • 프로필 정보 변경(이메일, 전화번호)
  • 연결 또는 연결 끊기
  • 비밀번호 변경
  • 계정 비활성화

서비스는 웹훅으로 사용자의 변경 사항을 즉시 감지해 세션 종료 또는 사용자 재인증 요청 등과 같은 보안 조치를 수행하거나, 사용자 정보를 최신 상태로 유지할 수 있습니다.

계정 상태 변경 웹훅은 OpenID 재단에서 개발 및 제공하는 Shared Signals and Events Framework(SSF) 규격을 바탕으로 설계됐으며, 일부 이벤트는 카카오에서 직접 정의해 제공합니다.

사용 안내
  1. 사용자의 계정 상태가 변경됩니다.
  2. 카카오에서 변경 이벤트 정보가 담긴 보안 이벤트 토큰(SET)을 서비스의 웹훅 URL로 보냅니다.
  3. 서비스는 웹훅 URL에 전달된 SET 정보검증합니다. 서비스는 성공 또는 실패로 응답해야 합니다.
  4. 서비스에서 이벤트 타입별로 필요한 조치 사항을 수행합니다.

자세한 구현 방법은 개발 문서를 참고합니다.

보안

카카오 API 플랫폼에서 제공하는 카카오 로그인 보안 기능의 자세한 내용을 안내합니다.

클라이언트 시크릿 코드

REST API 방식으로 카카오 로그인의 토큰 받기 API토큰 갱신하기 API 요청 시, 미리 발급받은 클라이언트 시크릿(Client secret) 코드를 client_secret 파라미터에 포함한 경우에만 성공 응답하도록 설정하는 보안 기능입니다. 설정 방법은 설정하기에서 확인할 수 있습니다.

클라이언트 시크릿 코드는 2년 이하 주기로 갱신할 것을 권장합니다. 클라이언트 시크릿 코드를 전달하지 않았거나 잘못된 값을 전달한 경우 KOE010 에러가 발생합니다.

보안을 위한 파라미터

카카오 로그인은 OAuth 2.0 및 OpenID Connect 표준에 따라, 인가 코드 받기 API에 보안을 강화할 수 있는 state, nonce 파라미터를 제공합니다. 사용자가 안전하게 카카오 로그인을 완료할 수 있도록 해당 파라미터 사용을 권장합니다.

stateCross-Site Request Forgery(CSRF) 공격으로부터 카카오 로그인 요청을 보호하기 위해 사용합니다. state는 카카오 로그인이 시작될 때부터 완료될 때까지 고유하고 동일한 값을 유지해야 합니다.

nonceOpenID Connect 사용 시 지원하는 파라미터로, ID 토큰 재생 공격을 방지하기 위해 사용합니다. nonce 값은 카카오 로그인 요청 시 전달한 ID 토큰에 포함되어, 서비스는 ID 토큰 유효성 검증으로 일치 여부를 확인해 ID 토큰 재생 공격을 방지할 수 있습니다.