안드로이드 앱에 카카오 소셜 로그인을 적용하려고 합니다. 현재 개발된 것은 android 카카오 sdk를 사용하여 로그인 성공 시 콜백으로 accessToken을 받고 accessToken을 저희 서비스의 로그인 API을 사용해서 서버에 보낸 후 JWT 토큰을 발급 받는 방식으로 개발했습니다. 기존 방식을 사용했던 이유는 android 카카오 SDK 사용 시 리다이렉션 과정을 SDK에서 처리하므로 REST API를 사용하는 방식보다 로그인 과정이 한 단계 줄어들고 개발 비용도 더 줄어든다고 생각했습니다. 하지만 현재 서버에선 https를 사용하지 않고 있어서 보안적으로 취약한 상태인데 이럴 경우 REST API & 웹뷰를 사용해서 인가 코드를 클라이언트에서 발급 받은 뒤 인가 코드를 백엔드 서버에 보내는 방식이 더 좋은 방법인지 궁금합니다.
안녕하세요.
아래는 개인적인 의견입니다.
가장 좋은 해결방법은 https를 사용하는 것이라 생각됩니다.
http의 보안 취약점 해결을 위해 고심중인 것으로 이해 하였습니다.
접근 토큰 발급을 백앤드에서 처리하기 위해 웹뷰를 사용하는 방식 또한 고려하고 계시지만, 이러한 취약점 해결을 위해 소모되는 시간과 개발 비용은 인증서를 설치하는 것 보다 많을거라 생각됩니다.
그리고, 결국 백앤드와 앱간 민감 정보를 주고 받게 된다면, 접근 토큰만 감춘다고 하여 보안 문제가 해결되지는 않을거라 생각됩니다. 즉, 서비스 운영에도 좋은 방법이라 생각되지는 않습니다.
참고로 구글에서는 앱이 http 트래픽을 사용하는지 감지하고 있고, 앱에서 민감 데이터 전송이 이루어 지고 있다고 판단되면 구글로 부터 제재 받을 수도 있습니다.
답변 감사합니다! 백엔드 개발자분과 소통해서 인증서 설치를 고려해보도록 하겠습니다!
카카오 안드로이드 SDK를 두고 REST API로 인가 코드를 발급 받아서 서버에 인가 코드를 넘기는 방식은 안전한 편인가요?
http를 유지하게 된다면 다른 대안은 없을지 궁금합니다.
http 환경에서 백앤드에서 접근 토큰 발급하는 경우 SDK로 발급 받은 접근 토큰을 넘겨주는 것 보다 안전하다고 할 수 있지만, 그럼에도 운영하시는 시스템이 보안에 취약 하다는 점에는 변함이 없습니다.
스터디 목적이나 포트폴리오 작성 등 일시적으로 서비스를 제작해 보시는게 아니라면 https 사용하는것을 권장 드립니다.
큰 도움을 주셔서 감사합니다.
추가로 생각해본 것은 굳이 카카오의 인가코드나 엑세스 토큰을 백엔드와 통신하지 않고 필요한 사용자 정보(이름, 성별)는 안드로이드에서 조회한 뒤 로그인 성공한 유저는 백엔드에게 로그인 요청을 하여 JWT 토큰을 발급 받는 방식은 어떤가요?? 이 로직에서 다른 문제가 발생할 수 있을까요?
저도 https를 사용하는 백엔드와 협업을 하다가 다른 방법을 고려해본 적은 처음이다 보니 안드로이드에서 주로 어떤 방식으로 서버와 인증 과정을 거치는지 궁금해졌습니다. (카카오 sdk를 사용하여 엑세스 토큰 발급 후 서버에 넘겨서 JWT 발급, 카카오 로그인과는 별도로 서버에서 JWT 발급, 웹뷰를 사용하여 인가코드를 발급 받은 후 서버에 넘겨서 JWT 발급 등…)
만약 안드로이드 네이티브 앱에서 인가코드를 발급받아서 백엔드에 넘기려면 어떤 문서를 참고하면 좋을까요?? 예제 코드를 찾고 있습니다.
백엔드에서 접근 토큰이 필요한 경우에만 전달하며
보통 클라이언트에서 백엔드로 접근 토큰을 전달하지 않습니다.
백엔드에서는 ADMIN KEY를 사용하여 사용자의 회원번호(앱유저아이디)만으로 사용자 정보를 조회할 수 있습니다.
때문에, 백엔드에서 사용자 접근토큰 사용이 필수인 API들의 사용이 필요하지 않는 이상 백엔드로 접근 토큰을 전달하지 않습니다.
서비스측 인가처리 (JWT 발급) 시, 접근 토큰이 반드시 필요해 보이지 않을것 같습니다.
이점을 먼저 고민해 보시면 좋을것 같습니다.
접근 토큰을 전달해야 할 필요가 있는경우, 따로 방식이 존재하지 않고 서비스측 API 작성하시어 전달하시면 됩니다.
회원번호(앱유저아이디)
사용자 정보 가져오기 에서 확인 가능한 회원번호(id, 앱유저아이디)