이 문서는 카카오 플랫폼을 사용하는 서비스를 위한 보안 권장사항을 안내합니다.
[플랫폼]에서 사전에 등록된 Android 패키지, iOS 번들과 웹 도메인만 SDK(Software Development Kit)에 접근 가능하도록 설정할 수 있습니다.
악의적인 외부로의 리다이렉트와 같은 공격을 방지하기 위해, 인가 코드 받기 API 요청 시 사용된 redirect_uri
가 [Redirect URI]에 등록된 값과 일치해야 기능이 정상 작동합니다.
[Client Secret]을 활성화하면, 액세스 토큰 발급 시 보안 강화 목적으로 client_secret
값을 추가 검증합니다. 토큰 받기와 토큰 갱신하기 API 요청 시, client_secret
파라미터를 추가하여 Client Secret 코드를 전달합니다. Client Secret 코드는 반드시 백엔드(Backend)에서만 사용해야 하며, 절대로 사용자 브라우저에 노출되어서는 안됩니다.
[허용 IP 주소]는 카카오 API 호출 시, 사전에 등록된 IP 주소의 요청만 허용하도록 설정하는 기능입니다.
[팀 관리]의 초대 기능으로 카카오디벨로퍼스 앱을 설정 및 변경할 수 있는 개발자 계정을 팀원으로 추가할 수 있습니다. 앱에 대한 모든 권한을 가진 오너(Owner) 계정은 계정 정보가 유출되지 않도록 강력한 암호를 사용해야 합니다.
팀원에게는 사용 목적에 따라 제한적으로 권한을 부여할 수 있습니다. 또한 테스트 앱을 사용하면 등록된 팀원만 접근 가능해 배포 전 테스트 단계에서 서비스 접근 보안을 강화할 수 있습니다.
오너 계정을 관리하던 직원이 퇴사하는 경우, [팀 관리]에서 오너 계정을 변경합니다. 불필요한 팀원 계정은 [내보내기]합니다.
앱 키는 플랫폼별로 각각 발급됩니다. 카카오 플랫폼은 앱 키 값으로 올바른 API 요청인지 검증 하며, Admin 키는 모든 권한을 갖고 있는 키이므로 유출되지 않도록 반드시 백엔드에서만 사용하도록 합니다.
카카오디벨로퍼스 앱의 오너 계정은 앱 키를 재발급받을 수 있습니다. 앱 키가 유출된 경우 재발급할 수 있지만, 이전 앱 키로 복구 불가능하니 신중하게 사용해야 합니다.
액세스 토큰은 API 요청에 사용되므로 유출되지 않도록 주의해야 하며, 리프레시 토큰의 경우 반드시 백엔드에서만 사용하도록 합니다.
액세스 토큰이 유출되더라도 외부에서 사용할 수 없도록 허용 IP 주소 설정 기능 사용을 권장합니다.
state
파라미터는 인가 코드 받기 API 요청 시 전달한 값을 Redirect URI에 전달하여 인가 요청 출처를 확인하는 데 사용합니다. 이는 CSRF(Cross-Site Request Forgery) 공격 방지용으로 활용할 수 있습니다.
카카오 로그인을 시도하는 각 사용자의 로그인 요청에 대한 state
값을 중복되지 않는 고유한 난수로 설정하고, Redirect URI에 전달된 값과 일치하는지 검증하는 방식으로 사용합니다. state
값은 세션 또는 동일 출처 정책에 의해 보호되는 쿠키 등 제3자가 접근할 수 없는 위치에 보관하여 사용해야 합니다. (참고: RFC 6749 10.12.)
인가 코드 받기 API 요청 시, prompt
파라미터 값을 login
으로 설정하면 기존 사용자 인증 여부와 상관없이 사용자에게 카카오계정 로그인 화면을 출력해 매번 로그인하도록 할 수 있습니다. 서비스 특성에 부합하는 경우 선택적으로 사용할 수 있습니다.
OpenID Connect를 통해 ID 토큰을 함께 발급받을 경우, ID 토큰 재생 공격을 방지하기 위해 사용합니다. ID 토큰 유효성 검증 시 대조할 고유한 난수 값을 nonce
파라미터로 전달합니다.
방화벽을 통해 허용된 시스템 호출만 허용하는 경우, kauth.kakao.com
, kapi.kakao.com
등 호출할 카카오 API 호스트(Host)의 IP를 허용해야 합니다.
연결 끊기 알림, 카카오톡 채널 관계 알림, 카카오톡 공유 전송 성공 알림과 같이 카카오에서 제공하는 콜백(Callback) 기능을 사용한다면 서비스 측 API를 호출할 수 있도록 카카오 IP를 허용합니다.
카카오톡 공유 메시지 발송 시 서비스 페이지 미리보기를 구성하는 경우, 카카오 스크랩 서버가 접근할 수 있도록 카카오 측 스크랩 요청 IP를 추가합니다.
응용프로그램으로 전송되는 또는 응용프로그램에서 전송하는 모든 민감한 데이터의 보호를 위해 다음 사항을 준수해야 합니다.
인가 코드 및 토큰 발급 요청에 사용되는 Redirect URI는 특별한 이유가 없는 한 HTTPS를 사용해야 합니다.(참고: RFC 6749 3.1.2.1)
파일 및 데이터베이스 내에 저장되는 모든 민감한 데이터는 암호화를 해야 합니다.
카카오로부터 전달받은 사용자 정보는 시스템 로그에 저장하지 않아야 합니다.
서비스 자체 회원 가입 기능으로 가입한 회원이 카카오 로그인 회원과 동일하여 매핑(Mapping)하는 경우 다음 사항을 유의해야 합니다.
/v2/user/me
) API 응답의 회원번호(Service User ID, id
)로 저장된 고객을 식별해야 합니다.Long
타입으로 1~9223372036854775807 범위 내 숫자 값입니다. 회원번호의 길이가 변해도 기능이 정상 동작하도록 구현해야 합니다.2018년 9월 19일 이전 생성 앱은 연결 끊기 후 재연결 시 회원번호가 변경되도록 설정되어 있을 수 있습니다. 이 경우 기존 계정으로 로그인 처리하기 위한 방법은 Q. 로그아웃 후 다시 로그인하면 ID가 변경되나요?를 참고합니다.
CI와 이메일도 변경될 수 있는 정보입니다. 이메일은 대표 이메일 설정 변경으로, CI는 사용자가 고객센터에 요청하는 경우 초기화 또는 변경될 수 있습니다.
사용자의 개인 정보를 보호하고 카카오디벨로퍼스에서 제공하는 기능을 안전하게 사용하도록 운영 정책을 준수해야합니다.
/v2/user/me
) API 응답의 회원번호도 개인정보이므로 탈퇴 시 파기되어야 합니다.사용자의 보안 상태 변경 사항을 수신할 수 있는 보안 이벤트 구독 기능을 사용해, 서비스내 개인 정보를 최신 상태로 유지하는 것을 권장합니다.
카카오가 제공하는 SDK를 비롯한 서비스에는 보안 업데이트가 제공됩니다. 보안을 위해 수시로 현재 제공 중인 SDK별 버전 정보를 확인하고, 가능한 최신 버전을 사용해야 합니다.
카카오 로그인 동의항목은 서비스에 반드시 필요한 최소한의 항목만으로 설정합니다.
제공하는 서비스가 다른 서비스로 오인되거나 피싱(Phishing)에 악용되지 않도록 카카오디벨로퍼스 앱 아이콘, 이름, 회사명을 실제 서비스 내용과 일치하도록 등록합니다.
카카오 로그인 사용 시, 제공된 디자인 가이드를 준수하여 사용자가 카카오 로그인을 통해 개별 서비스에 가입됨을 인지할 수 있어야 합니다.
카카오 상표 도용을 금지합니다. 카카오의 허가 없이 카카오디벨로퍼스 앱의 이름, 아이콘, 회사명에 카카오 서비스 또는 카카오 제휴 서비스로 오인될 수 있는 내용을 등록해서는 안됩니다. (예: "for Kakao" 명시)
앱키가 유출된 경우, 앱 키 재발급으로 기존 앱 키를 무효화할 수 있습니다. 재발급된 앱 키는 기존 앱 키 값으로 복구할 수 없습니다. 앱 키를 재발급하면 서비스 애플리케이션이나 웹 사이트에 적용된 앱 키를 재발급된 값으로 변경해야 카카오 API를 정상적으로 이용할 수 있습니다.
pf.security@kakaocorp.com
을 통해 카카오의 보안 취약성에 대해 리포트할 수 있습니다. 카카오 플랫폼을 이용 중인 서비스의 보안을 강화하기 위한 궁금한 점이 있는 경우 DevTalk을 통해 문의할 수 있습니다.