카카오 로그인 콜 백 두번 호출되는 현상

문의

안녕하세요. 카카오 로그인 이용하고 있습니다.
카카오 로그인시 인증완료 후 1초 간격으로 callback이 두 번 날라옵니다.
저희 서비스에서는 code를 통해 accessToken을 교환하고 회원 인증토큰을 발급합니다.
이렇게 두 번 callback이 수신되면 사용자 인증토큰을 두 번 생성하게 되어 로그인이 풀리는 문제가 발생할 수 있습니다.
혹시 이렇게 두 번 발신시켜주시는 이유가 Oauth2에 관련된 매커니즘에 따른건지
(제가 잘 몰라서… 혹시 약관동의 등에 따라 한 번 더 call을 주시는 지) 혹은 또 다른 이유가 있는지 궁금합니다.

당사 서비스는 리액트 네이티브 (Expo)로 개발 되었습니다.

재현 환경

  • 안드로이드에서는 약 40%로 발생합니다. (크롬, 삼성인터넷 브라우저에서 테스트 둘 다 재현)
  • 아이폰에서는 발생하지 않습니다.

로그인 페이지 호출 방법

$redirectUrl = filter_var("저희측 CALLBACK API주소" . "/v3/sns/oauth/kakao/code", FILTER_SANITIZE_URL);

$scheme = $this->input->get("scheme");
$baseUrl = "https://kauth.kakao.com/oauth/authorize?client_id=%s&redirect_uri=%s&state=%s&response_type=code";
$authUrl = sprintf($baseUrl, KAKAO_API_CLIENT_ID, $redirectUrl, $scheme);

header("Location: " . $authUrl);

실제 수신 받은 Callback accesslog

code값은 앞 몇 자리를 제외하고 생략합니다.

케이스1

  • 14/Apr/2022:03:47:05 - /v3/sns/oauth/kakao/code?code=-1GuFX6rpPaV_omne
  • 14/Apr/2022:03:47:06 - /v3/sns/oauth/kakao/code?code=83Xgma7k6wM

케이스2

  • 14/Apr/2022:07:44:17 - /v3/sns/oauth/kakao/code?code=o5pmuGyeEdP
  • 14/Apr/2022:07:44:18 - /v3/sns/oauth/kakao/code?code=IuH7h9PZZYXtu511w

감사합니다.

안녕하세요~

확인을 위해 앱 ID 알려주세요~


앱ID
https://developers.kakao.com/ 의 내 애플리케이션>앱 설정>요약 정보 : 기본정보에 있는 앱 ID
숫자로된 ID 입니다~
ex) 123456

앱ID: 237420
감사합니다.

현재 확인해보니,
카카오 로그인 페이지 호출 후 [동의하기]를 거친경우 callback이 두 번 호출 되는것으로 보입니다.

안녕하세요.

알려주신 케이스를 살펴 보았는데요
모두 클라이언트로 부터 요청을 1초간격으로 두번씩 받아 두번 다 콜백이 된 정상적인 상황입니다.

클라이언트측(RN) 코드를 확인 부탁드립니다.

1개의 좋아요

감사합니다! 확인해보겠습니다.

안녕하세요. 어제 오늘 다방면으로 살펴본 결과
자사 애플리케이션뿐만 아니라 모바일 일반 브라우저 환경에서도 동일하게 재현되는 걸 확인했습니다.

자사 서버

자바 서버에서는 return code가 되면 accessToken 발급 → 사용자 조회 → 가입(혹은 로그인 처리)후
자바스크립트를 통해 get parameter로 전달 된 appScheme을 호출하고 있습니다.

window.location.href = '<?= $appScheme->getUrl() ?>'

위 location.href를 통해 앱으로 redirect 되는 순간 /code 가 한 번 더 호출되는 걸 확인했습니다.
앱 scheme는 자사 앱 뿐만 아니라 타사 앱을 호출해도 동일하게 code가 두 번 호출되는걸 확인했습니다.

상황

POST /kauth/kakao.com/oauth/authorize 첫 번째 호출 (정상)

스크린샷 2022-04-15 오후 3.32.11

GET /kauth/kakao.com/oauth/authorize (비정상적으로 호출됨)

스크린샷 2022-04-15 오후 3.32.14

카카오페이지 로그인 요청 주소

http://api.beta.ban-life.com/v3/sns/oauth/kakao?scheme=smartbaedal://&os=ANDROID

재현 경로

  1. 카카오톡 로그인 호출
  2. 동의하기 확인 (이 부분이 중요)
  3. callback 수신
  4. access token 교환 및 로그인 처리
  5. 최종적으로 javascript를 통해 앱 scheme으로 이동
  6. callback 수신
  7. access token 교환 빛 로그인 처리…
  8. 생략

동의하기 화면이 나오지 않고 기존에 동의기록(세션)이 있는경우 재현되지 않습니다.

재현가능 안드로이드 환경

  • 갤럭시 S10+
  • One UI 4.1
  • 안드로이드 12

재현 안드로이드 브라우저

  • 크롬 브라우저 (version 100.0.4896.88)
  • 삼성 인터넷 브라우저 (16.2.5.4)

재현 불가능 환경

  • 안드로이드: 카카오톡 앱 내장 웹뷰
  • 아이폰: 크롬 브라우저

현재 저는 이 문제를 해결하기 위해 두 번 째 호출되는 요청은 무시하도록 처리했습니다.
chrome쪽 버그 리포팅이 있는지 찾아보겠습니다.