안녕하세요.
안드로이드 모바일 앱 환경에서 카카오 로그인 시 질문이 있어 글 남깁니다.
□ 사용환경
- 프론트엔드 : Kotlin
- 백엔드 : Spring
모바일 환경의 경우 안드로이드 SDK를 사용하여 프론트엔드 측에서 인가코드/액세스토큰/사용자정보를 받아와, 사용자 정보를 백엔드 측으로 보내 해당 사용자 정보를 백엔드 측에 저장하는 방법이 권장된다고 알고 있습니다.
제가 진행 중인 프로젝트에서도 다음과 같은 방법으로 안드로이드 환경에서 로그인 후 저희 서버 측에서 jwt 토큰을 발급할 예정입니다.
여기서 몇 가지 질문이 있습니다.
[1] 사용자 정보 본인 서비스 DB 저장 시 유효성 검증 여부
카카오 리소스 서버에서 발급한 액세스 토큰을 전달하여 백엔드에서 해당 액세스 토큰을 바탕으로 해당 사용자 존재 여부를 확인하는 것이 아닌, 프론트엔드에서 백엔드로 사용자 정보만 전달하여 저희 서비스 DB에 정보를 저장하는데 저희 서버의 로그인 엔드포인트로 가짜 데이터를 담아 요청을 보내도 사용자 정보는 그대로 저장될 것인데 유효성 검증 로직을 추가할 수 있는 방법이 있을까요?
[2] 카카오 메시지와 같은 추가 기능 이용 시 질문사항
저희 프로젝트에서 생각하고 있는 기능 중 ‘예약 성공 시 예약 성공 여부를 카카오톡 메시지로 전달’ 이라는 기능 개발을 생각 중입니다.
사업자 등록이 불가능하여 카카오 비지니스를 통한 채널 알림톡 사용에 제한이 있어 다음 기능 구현을 위해 카카오 메시지 문서를 참고하여, 사용자에게 ‘나에게 메시지 보내기’ 또는 ‘친구에게 메시지 보내기’ 기능을 통해 예약 성공 시 예약 확인 여부를 메시지로 보내려고 합니다.
https://developers.kakao.com/docs/latest/ko/message/rest-api#custom-template-msg-friend-request-body
위 문서를 참고하였을 때, 메시지를 보낼 대상의 uuid만 있으면 메시지를 보낼 수 있는 것 같습니다.
2-1) 사용자 정보를 받아올 때 id 값은 바뀔 일이 없이 고유한가요?
다른 카카오 데브톡 질문을 참고하였을 때, 최신 버전에서는 사용자 정보 응답에 담긴 id 값이 바뀔 일이 없다는 글을 보았지만, 혹시나 하는 마음에 질문드립니다.
2-2) 카카오 리소스 서버 발급 액세스 토큰 저장 여부 및 갱신 관련 질문
위의 [2]에서의 질문과 같이 메시지를 보낼 때, 결국 카카오 리소스 서버에서 발급하는 액세스토큰을 백엔드측으로 보내, 해당 액세스 토큰과 예약 서비스에 연관된 사용자의 uuid를 바탕으로 요청을 보내야하는 것 같습니다.
그런데 이때, 액세스 토큰이 만료된 경우에는 어떻게 처리하는 지 궁금합니다.
안드로이드 SDK(이해하기 | Kakao Developers 이해하기)에 의해서는 자동으로 토큰이 갱신된다고 하지만, 제가 구상한 구조는 결국 백엔드 측에서 메시지를 보내는 카카오 서버 엔드포인트를 호출하기 때문에 토큰 갱신 관련하여 문제가 생긴다고 생각합니다.
아니면, 메시지를 프론트엔드에서 보내도록 구조를 바꿔야하는 게 맞는 건가 싶습니다. 백엔드에서 프론트엔드로 예약 서비스에 연관된 사용자의 카카오 고유 id를 보내어 프론트엔드(안드로이드 모바일)에서 처리하는 것이 맞을까요? (다음과 같이 처리 시 기타 사용자의 카카오 고유 id를 프론트로 전달하는 것에 있어 보안 관련 유의사항이 있을까요?)
[3] 카카오 리소스 서버 발급 토큰 외 서비스 서버에서의 추가 토큰 발급 시 만료기한
프론트엔드에서 백엔드로 데이터를 받는 요청을 보낼 때 저희 서버 측에서 발급한 jwt 토큰을 사용합니다.
위에서 서술한 방식처럼 카카오 리소스 서버에서 발급한 토큰과 서비스 서버에서 발급한 토큰을 둘 다 프론트에서 가지고 있어야할 경우, 저희 서비스 서버에서 발급한 토큰의 만료기한을 카카오 리소스 서버에서 제공한 액세스 토큰의 만료기한과 같도록 설정하는 것이 일반적인가요?
질문의 내용이 너무 길어 죄송합니다.
관련 내용에 있어 이해가 부족하여 양해 부탁드리겠습니다.