어플에서 카카오 로그인 구현 질문

안드로이드 앱 환경에서 카카오 로그인 구현 관련 문의드립니다.

보안상의 이유로 로그인 과정을 프론트, 백엔드 둘이 나눠서 처리하지말고 한 쪽에서 처리하라고 답변하시는 것을 봤습니다. 또한, 인증서버로 부터 받은 인가 코드나 액세스 토큰을 백엔드로 전달하는 것은 보안상의 문제로 거의 권하지 않는다고 알고 있습니다.

  1. Ios, android 네이티브앱에서 카카오 로그인 후 사용자 정보를 서버에 보내려고 합니다 - woody.ho 님의 게시물 #2
    그런데 다른 분의 구현 로직 중에 프론트에서 “웹의 경우 접근토큰을 백엔드 redirect_uri에서 발급 받으시면 되기에 문의하신바와 같은 본안 문제는 발생하지 않겠지만, 앱의 경우 별도 보안처리가 필요 합니다.
    앱에서 별다른 보안처리가 존재하지 않는 경우 접근토큰 만을 서비스로 전달하여 이를 대신할 수도 있습니다.” 라고 프론트에서 카카오로부터 발급받은 접근토큰을 백엔드로 넘겨서 사용해도 된다는 식으로 말씀을 하신 걸 보고 의아해서 여쭤봅니다… 혹시 이 방법이 현실적으로 큰 문제가 없어서 인가코드나 접근토큰을 그냥 넘겨줘도 괜찮은걸까요?

  2. 한쪽에서 모든 로그인 과정을 다 처리하는게 더 안전하다고 하셔서 백엔드단에서 모두 처리하려고 하는데 웹에서는 보통 쿠키로 로그인 성공으로 발급된 JWT 토큰을 프론트에게 전달해주는데, 앱에서는 어떤 식으로 구현을 하는 것을 권장하실까요? 앱에서는 쿠키처리가 까다롭고 설정해줘야할게 많다고 알고 있어서 일반적으로 어떻게 구현하는지 여쭤보고 싶습니다!

안녕하세요.

인가코드나 접근토큰을 그냥 넘겨줘도 괜찮은걸까요?

네이티브 SDK사용 시, 인가코드는 SDK 내에서 즉시 소모됩니다.
따라서 인가코드를 서비스로 전달할 수 없습니다.
대신 문의주신 내용과 같이 서비스측의 인가처리를 위해 횔용 가능한 ID토큰을 제공하고 있습니다.

[OpenID Connect] 활성화 하시면 접근토큰 발급 시 id_token이 추가 전달 됩니다.
이 토큰을 백엔드로 전달하여 유효성 검증을 하신 후, 서비스에 필요한 추가적인 처리를 마무리 하실 수 있습니다.

추가로 해당 답변글의 "접근토큰"은 ID토큰으로 수정하였습니다. 접근토큰 받을 때 같이 전달 되기에 잘못 작성한 것으로 보입니다.
다른 비슷한 문의에서는 ID토큰을 활용하도록 안내드리고 있습니다.

웹에서는 보통 쿠키로 로그인 성공으로 발급된 JWT 토큰을 프론트에게 전달해주는데, 앱에서는 어떤 식으로 구현을 하는 것을 권장하실까요?

기호에 따라 처리하시면 됩니다.
다만, 웹에서는 쿠키에 저장하면 별다른 처리를 하지 않아도 브라우저가 파일로 저장한 뒤 다음번 요청 시 브라우저가 전달해 주지만 앱에서는 메모리에 저장 되기에 앱이 종료되면 삭제됩니다.

떄문에 앱에서는 어떠한 방식으로든 로컬 저장소를 활용하여 쿠키를 저장해 두거나, 요청 시 마다 헤더로 직접 전달하거나하는 처리가 필요합니다.