플루터에서 소셜로그인 구현시 서버단으로 인가코드 전달

버전 정보
flutter sdk : 1.1.1
플랫폼 : Android

안녕하세요. pc웹에서 소셜로그인을 구현한뒤 모바일 환경에서 플루터로 소셜로그인을 붙여보려고 시도 하고 있는 초보 개발자 입니다. 플루터로 소셜로그인을 붙여보려고 하니 이전에 pc환경의 웹에서 소셜로그인을 붙일떄와 조금 다른것 같은데 답변들을 살펴봐도 상반되는 답변들이 있는것 같아서 질문 드리러 왔습니다.

  1. 다음 링크에 보시면 가장 마지막에 해주신 답변에서는 ‘안드로이드 SDK로 사용하신다면 가이드와 같이 SDK통해 함수 호출만 하시면됩니다.’ 라고 답변해 주셨습니다.
    카카오 로그인 토큰 관련 질문입니다 - tim.l님의 글 #2

  2. 다음 링크를 보시면 인가토큰, 액세스토큰에 대한 관리는 백엔드에서 하는것이고 주고받지 말라고 답변해 주셨습니다.
    카카오톡 로그인 Flutter sdk with firebase or etc
    아마 rest api로 구현할때 이야기인것 같습니다.

  3. 플루터 sdk를 사용하려는 이유.

  • 현재 이용중인 페이지에 있는 이벤트리스너 등이 모두 제거되어 제어가 힘듦
  • webview 사용 시 해당 방식을 더 권장하기 때문에.
  • 카카오톡 앱으로 전환되어서 인증을 진행하려면 sdk를 사용 해야만 하는것 같음.
  1. 플루터sdk에서는 인가토큰과 액세스토큰을 클라이언트에게 바로 발급해주는것 같습니다. redirect uri로 전달해주지 않구요. 저희 서비스에 가입된 유저인지 판단하기 위해서는 액세스토큰, 리프레쉬 토큰을 서버쪽으로 보내야 할것 같은데 액세스토큰을 이렇게 주고받는게 맞는건지 의문이 듭니다.

  2. rest api 로 할떄는 인가토큰이랑 액세스토큰 노출 안할려고 redirect uri등록해서 그쪽으로 받다가 막상 모바일에서는 sdk사용할떄는 액세스토큰, 리프레쉬 토큰을 노출될수있는채로 그냥 사용하는것 같아서 이상하게 느껴집니다. 탈취될수 있다는걸 감안하고 그냥 쓴다고 보면 될까요?

안녕하세요.

(1) 모바일 환경에서 SDK사용할때
(2) 웹환경에서 Front, Backend 서버 분리된 경우

각각 조금 다를 것 같구요.

인가 코드를 받아 front로 보내거나 Backend로 보내거나는 상황에 맞게 구현하시면되지만
REST환경에서 액세스 토큰은 Backend에서만 관리하시는게 보안을 위해 좋습니다.

플루터 sdk를 사용하시면 REST 방식은 사용하실 필요없습니다.
SDK사용시, 카카오서버와 통신은 SDK가 담당하며 모바일 앱에서는 SDK가 제공하는 기능만 사용하시면됩니다.

웹서비스에서 액세스 토큰을 Backend에서만 관리하도록 안내하는 것은 상대적으로 출력된 Front소스에 접근이 쉬운 웹환경일때 액세스토큰이 탈취되지 않도록 하기 위함입니다.


모바일에서 시스템 구축 시,
카카오와 교신은 SDK에게 일임하고
SDK로 부터 받은 사용자 정보는 REST-API를 이용하여 제공하시는 서비스 서버에 저장합니다.
가입 후,
카카오 로그인 시, 가입된 유저인지 판단은 액세스 토큰이아니라
SDK에의해 조회된 앱유저ID와 제공하시는 서비스 서버에 저장된 앱유저ID를 비교하여 판단합니다.

  1. rest api 로 할떄는 인가토큰이랑 액세스토큰 노출 안할려고 redirect uri등록해서 그쪽으로 받다가 막상 모바일에서는 sdk사용할떄는 액세스토큰, 리프레쉬 토큰을 노출될수있는채로 그냥 사용하는것 같아서 이상하게 느껴집니다. 탈취될수 있다는걸 감안하고 그냥 쓴다고 보면 될까요?

모바일 기기는 일반적으로 특정 사용자 개인 기기 입니다. 또한 웹브라우저의 소스보기 기능과 같은 단순한 기능으로 액세스 토큰과 리프레시 토큰의 열람은 불가능합니다. 로그인된 기기를 온전히 탈취해서 조작하지 않는한 "노출될수있는채로 그냥 사용"되지는 않습니다. 서비스하는 앱 도, 디벨로퍼스에 미리 등록된 패키지 또는 번들하에서만 카카오에서 정보를 받아갈 수 있습니다.

반대로 웹환경의 REST-API사용 시, URL접근으로 어떤 기기에서든 서비스 Front에 접근 가능합니다. 디벨로퍼스에 미리 등록된 서버만 접근 가능하도록 할 수 있지만, 액세스 토큰을 웹브라우저로 내려주게되면 제3자가 접근할 가능성이 모바일 기기보다는 훨신 높습니다.

모바일 환경과 웹환경의 특성차이가 있으므로 같은 조건이 아니라 판단하는게 좋을 것 같습니다.