플러터 iOS/Android 네이티브 환경 카카오 로그인 사용 방식 문의

kakao_flutter_sdk: ^1.5.0 / 플러터 iOS + Android 이용중입니다.


네이티브앱 환경에서 loginWithKakaoTalk 및 loginWithKakaoAccount를 이용해 프론트에서 카카오 토큰 발급 및 이름, 생년월일 등을 입력받아 회원정보 수집까지 처리하려고 합니다. 여기까지는 문제가 없는데 이 정보로 백엔드를 통해 로그인 / 회원가입을 처리하는 과정에 의문이 있어 문의드립니다. 백엔드는 파이썬 FastApi를 쓰고 있습니다.

현재 개발중인 서비스에서는
회원가입의 경우 [카카오 로그인 → 토큰을 발급받아서 UserApi.instance.me()를 통해 회원 정보 요청 → 백엔드에 유저의 id를 조회 → 가입되지 않은 이용자인 경우 받아온 회원 정보에 더해 몇가지 필요한 정보를 입력받음 → 회원가입에 필요한 정보들을 백엔드로 보내 회원 등록 후 jwt token 발급 → 이후 서비스에 jwt token 사용]
로그인의 경우 [카카오 로그인 → 토큰을 발급받아서 UserApi.instance.me()를 통해 회원 정보 요청 → 백엔드에 유저의 id를 조회 → 가입된 이용자인 경우 jwt token 발급]
방식으로 구현되어 있습니다.

그런데 백엔드에 id를 전송해 이미 가입된 회원인지 조회하는 과정에서

  1. 카카오 토큰까지 함께 백엔드로 보내서 백엔드에서 카카오토큰을 다시 검증하는 방법
  2. 카카오에서 제공한 유저 ID값만 전송해서 회원 식별
    두 가지 방법 중 고민중인데 카카오에서 권장하는 방식이 어떻게 되는지 궁금합니다.
    일단은 2번 방식이 더 적절하다고 판단중인데 이렇게 처리할 경우 정상적으로 카카오 로그인을 완료했고, 카카오에서 제공한 정상적인 id라는 것을 백엔드가 어떻게 검증하는것이 좋을지 또한 가능하다면 조언 부탁드립니다.

감사합니다.

안녕하세요.

2번 방식인 회원번호(앱 유저 id) 값만 보낸 것이 좋을것 같습니다.

백드에서는 회원번호를 통해 정상적인 ID인지 검증하실 수 있습니다.
(백엔드에서 ADMIN KEY를 사용하여 사용자 정보 가져오기API 사용 가능하며, 정상 조회 시 정상이라 볼 수 있습니다.)

회원번호는 사용자 정보조회(UserApi.instance.me)시 반환됩니다. 클라이언트에서 이를 백엔드로 전달 가능하다는 것은 이미 정상적인 ID 라는 것이 검증된 상태를 의미 합니다. 따라서 프론트와 백엔드간 API 요청이 안전하다면, 백엔드에서 다시 조회하지 않으셔도 무방 합니다.

@avexiin3
안녕하세요.

앞서 답변드린 내용은
서비스측 인가 처리 이후를 가정한 API요청이 안전한 경우를 예를 들어 대략적인 답변을 드렸습니다. 이 답변이 오해를 드릴수 있기에 추가 안내 드리고자 합니다.

서비스측 인가처리를 위한 요청에 회원번호만을 전달하여 처리하는 경우, 서비스는 이 요청이 클라이언트의 유효한 요청인지 확인하실 필요가 있습니다.

이를 위해 access_token이나 id_token을 전달하실 수 있습니다.
전달받은 토큰의 유효성 검증(토큰 정보 보기 or id_token 유효성 검증)을 통해 해당 유저가 발급 받은 토큰인점을 확인하신 뒤, 서비스측 회원 가입 및 인가처리를 하실 수 있습니다.