안드로이드 로그인 관련 질문입니다! (+백엔드 협업)

안녕하세요. 현재 백엔드와 프로젝트 협업 중 궁금한 사항이 있어 질문드립니다!

  1. 백엔드 측에서 https://kauth.kakao.com/oauth/authorize?client_id={api-key}&redirect_uri={redirect-uri}&response_type=code 이 주소로 앱내에서 요청을 하고 로그인을 진행하면 백엔드 측에서 구현한 api로 redirect가 된다고 합니다. 하지만 제 생각에는 웹에서 많이 기용하는 방식인 것 같습니다. 이렇게 된다면 로그인 관련 서비스는 사용자 기기에 소셜 어플 설치 유무를 떠나서 무조건 웹뷰에서 실시할 수 밖에 없다고 생각하기 때문입니다. 제 생각이 틀린걸까요?

  2. 카카오 SDK를 이용해 구현한다면, 클라이언트가 직접 엑세스 토큰을 다루는 것이 좋지 않다고 들었습니다. 그렇다면 유저 id값(고유한 값이라고 들었습니다)을 받아와 백엔드에게 넘겨주는 방식으로 로그인 서비스를 구현할 수 있을까요?

  3. 2번과 조금 이어지는 질문입니다. SDK를 활용해 구현한다면, 카카오 개발자 센터에 애플리케이션을 등록할 때 프론트와 백엔드를 나눠서 등록하나요? 제가 벡엔드를 잘몰라서 백엔드도 애플리케이션 설정을 하는지 궁금해 질문드렸습니다.

  4. 다른 어플들은 어떤 방식으로 서버와 통신해 로그인을 구현하는지 궁금합니다. (구현방식마다 정말 다르겠지만 통상적으로 서버와 안드로이드 통신 방법을 설명해주시면 감사드리겠습니다!)

아직 초보 개발자라 모르는 내용도 많고 궁금한 내용도 많네요 양해부탁드립니다 ㅠㅠ
감사합니다!

안녕하세요.

웹뷰를 활용한 카카오 로그인 사용은 구현상 선택 사항입니다.

서비스측 앱이 웹뷰 기반으로 동작하는 하이브리드 앱이라면, 굳이 Android SDK를 사용하실 필요 없이, 웹에서 JS SDK를 사용하여 redirect 방식의 카카오 로그인을 구현할 수 있습니다.

반대로 네이티브로 만으로 작성된 경우, 굳이 웹뷰를 사용하여 카카오 로그인 사용하실 필요 없이, Android SDK를 사용하여 카카오 로그인 가능합니다. 단, 이경우는 redirect 방식으로 동작하지 않고 클라이언트에서 토큰발급 됩니다.

서비스측 앱 개발환경에 따라 두 방식중 하나를 선택하여 개발하실 수 있으며, 두 방식 모두 카카오톡 앱이 설치된 경우 톡으로 인증이 진행됩니다. (JS SDK, Android SDK)

디벨로퍼스에서는 플랫폼에 따라 웹과 웹뷰로 이루어진 서비스를 위해 JS SDK를, 네이티브의 경우 Android/iOS/flutter SDK를 제공하고 있습니다.


2. 액세스 토큰(접근 토큰)의 위치 또한 구현상 선택 사항 입니다.

카카오 로그인 과정은 인가코드 접근토큰 발급 및 최소 1회 사용자 정보조회로 완료 됩니다. id(고유한 값)은 사용자 정보조회 시 전달되는 값으로 이 값을 보유하고 있다는 것은 이미 사용자 정보조회까지 완료된 상태로 즉, 카카오 로그인 과정이 완료된 상태 입니다.

웹/하이브리드 앱 서비스의 경우:
대부분 웹서비스 기반에서 접근 토큰 발급은 서비스측 백앤드에서 이루어 집니다.
필요에 따라 접근토큰을 저장하여 사용하시면 되며, 다음의 경우가 아니라면 클라이언트로 전달할 필요가 없습니다.

클라이언트로 접근 토큰을 전달 하는 경우는 JS SDK를 사용하여 클라이언트에서 카카오 로그인 이외의 API 사용이 필요할 때 활용 됩니다.

네이티브 앱 서비스의 경우:
하이브리드 앱이 아닌경우 대부분의 서비스는 카카오에서 제공되는 Android/iOS/flutter SDK를 사용합니다. 이들 SDK는 접근토큰 발급이 클라이언트에서 진행됩니다. 클라이언트에서 사용자 정보조회 까지 진행하여 카카오 로그인 과정을 완료하고 id 값을 얻을 수 있습니다. 이 때 획득한 접근토큰 및 사용자 정보(id, nickname 등)을 필요에 따라 서비스측 백앤드로 전달하여 사용하실 수 있습니다.


3. 동일 서비스에는 하나의 디벨로퍼스 앱만 생성 하셔야 합니다.

사용되는 플랫폼(웹, iOS, Android 등)에 따라 각각 앱을 만들지 않습니다.
카카오 로그인 정보는 디벨로퍼스 앱에 종속적 이기에 플랫폼 별로 앱을 생성하여 사용하시면 사용자는 각각 카카오 로그인하게 됩니다.


4. 구현 방식에 따라 다릅니다.

하이브리드앱 인경우, 보편적으로 JS SDK를 활용하여 redirect 방식의 카카오 로그인을 많이 사용합니다.

네이티브 앱의 경우, 보편적으로 SDK를 주로 사용합니다.
따라서, 카카오 로그인 처리는 클라이언트 에서만 처리됩니다.
클라이언트에서 조회된 정보를 갖고 서비스측 회원 및 인가처리를 하며, 보통 id 와, 닉네임, 이메일, 프로필 이미지 등을 백앤드로 전달하여 회원 등록 및 서비스측 인가 처리를 합니다.

친절한 답변 정말 감사드립니다! 추가적으로 궁금한사항이 있습니다

  1. 현재 저희앱은 네이티브 앱으로만 구성되어있어 답변자분께서 가이드라인을 해주신
    로그인처리를 클라이언트 SDK만을 사용한다 했을때, 엑세스토큰이나 별다른 정보없이
    사용자 id나 부가적인 정보를 백엔드로 보내는 방식으로 이해하면될까요?

2.안드로이드 설정에서 redirect url설정이 있는데, 이 url설정을 따로 백엔드와 상의해야하는 내용인가요?
제가 이해하기론, redirect url이 카카오측에서 로그인이 완료된 후 인가코드를 다시 돌아오는 페이지 url에 전달하는 방식으로 이해했는데, 1번같이 서비스를 구현한다면 url설정을 임의의 주소로 해도되는건가요?

답변감사합니다ㅠㅠ 현재까지 답변해주신 내용으로만도 정말 도움이 많이됬습니다!!!

1. 네, 맞습니다.
액세스 토큰 및 리프래시 토큰은 백앤드에서 활용할 니즈가 없다면 전달하실 필요 없습니다.

2. 안드로이드 설정에 redirect rul 설정은 어떤것을 말씀하시는건가요?
UserApiClient에서 해당 파라미터는 받고 있지 않습니다.


여기입니다! 그리구 추가적으로 명세서를 봤을때
안드로이드 스튜디오 매니페스트에 Redirect url을 설정하는 부분에 궁금해서 질문드렸습니다!

디벨로퍼스에서 Redirect URI 설정은 웹 서비스에서 필요한 설정입니다.
사용자가 카카오 로그인 성공하면, 인가코드를 서비스측 redirect_uri 로 전달하게 됩니다.
이 redirect_uri는 사전에 등록되어 있어야만 하며 그렇지 않은경우 KOE006 오류가 발생하게 됩니다.

안드로이드에서는 사용자 디바이스가 웹서비스가 아니기에 인가코드를 전달 받아야 하는 리디렉션 지점이 자신의 애플리케이션의 되어야 할것입니다.
이는 첨부 이미지와 같은 패턴으로 설정해 두면, SDK가 인가코드를 전달받아 접근토큰 발급까지 진행합니다.

답변 정말 감사드립니다! 정말 많은 도움이되었습니다