Service Client 개발을 위해 flutter로 Anroid, iOS 네이티브 앱 개발을 하고 있습니다. Service Server는 FastAPI를 사용해서 개발하고 있습니다. 카카오톡 로그인 기능과 관련하여 Service Server와 Service Client간에 어떻게 정보를 주고 받아야 하는지, API를 어떻게 설계해야 할지 궁금한 점이 있어서 질문드립니다.
redirect가 아닌 '기본 방식’을 사용할 것이며, 권장 방법인 '카카오톡으로 로그인’으로 구현하려고 합니다.
이렇게 구현하게 되면 flutter 앱이 ‘KakaoTalk’, 'Kakao Auth Server’와 인증 절차를 거친 후 OAuthToken을 받을 수 있으며, 해당 토큰을 사용해서 카카오로부터 사용자의 카카오톡 index, 이름, 프로필 사진 등의 정보를 얻어오는 것까지 이해했습니다.
과거에 웹 프로젝트들을 진행하면서 Service Server에서 제가 직접 회원가입 및 로그인을 구현했을 때는, Service Server에서 토큰을 Service Client에 발급해줬습니다. 그리고 Service Client가 사용자와 관련되는 등 민감한 정보를 Service Server로부터 받기 위해서는 해당 토큰을 보내서 인증 과정을 거쳤습니다.
그런데 flutter를 사용한 네이티브 앱 개발 프로젝트를 진행하면서, 카카오 로그인 기능을 구현하려고 하면서 아래와 같은 질문들이 생겼습니다.
- 카카오 로그인을 사용하게 된다면 Service Client(flutter 네이티브앱)가 인증 과정에서 Service Server로 어떤 정보를 어떻게 보내야 할까요?
- Service Client가 Kakao Auth Server로부터 받은 토큰을 Service Server로 보내게 된다면, Service Server가 카카오로부터 추가 인증 절차를 거쳐야 할 것 같은데, 이 부분을 어떻게 구현해야 할지 궁금합니다. 그리고 Service Server가 Service Client로 카카오에게서 받은 토큰을 보내는 것 자체가 보안적으로 좋지 못하다는 글을 봤는데, 만약 맞다면 왜 그런지도 궁금합니다.
- Service Client가 Service Server로 토큰을 보내지 않는다고 하면, 해당 사용자가 올바른 사용자인지 Service Server에서는 무엇으로 판단할 수 있을까요? Service Server로 사용자의 kakao index만 보내는 걸 생각해봤는데, 이러면 보안적 측면에서 API 주소와 메서드만 알게 된다면 누구나 악용할 수 있을 거 같아서 걱정이 되네요.
- 프론트인 Service Client가 웹일 때와, 네이티브 앱일 때 API를 설계하는 부분에서 차이점이 있을까요? 있다면 어떤 차이점이 있을까요. 네이티브 앱에서 카카오 로그인 기능을 구현하면서 기존에 진행했던 웹 프로젝트와는 조금 다른 점들이 보이는 것 같은데 명확하지가 않습니다.
공식 문서도 정독하고, 구글링도 해보고, 유튜브도 봤는데 처음 도전해보는 분야다 보니 궁금한 점이 많습니다. 부디 확인 부탁드리겠습니다.