카카오 sdk를 이용한 로그인 검증에 대해 문의드립니다

안녕하세요. 게시판에 있는 로그인에 관한 글을 읽어보면 카카오 sdk를 통해 카카오와 통신하는 일을 클라이언트에 위임하고 서버에서는 클라이언트에게 넘겨받는 정보만을 처리하는 방식을 권장하는 것 같습니다. 현재 제가 개발중인 서비스에서는 안드로이드에서 카카오 sdk를 통해 인가 및 로그인을 한 후, 응답 받은 사용자 정보 중 카카오 회원 번호를 서버로 전달하여, 서버에서 회원 번호와 랜덤값을 가지고 access tocken을 발급하는 형식으로 회원가입을 처리하고 있습니다.
이때, 카카오 회원 번호가 유효하지 않더라도 (postman 요청으로 아무 숫자를 넣어도) 서버에서는 해당 회원을 새로 가입시키고 토큰을 발급하게 됩니다. 이런 문제를 해결하고자 서버에서 REST API | Kakao Developers REST API 의 '요청: 서비스 앱 어드민 키 방식’을 통해 유효한 회원 번호인지 검증을 하고 회원 가입을 진행하는 방식은 좋은 방식이 아닌가요?(카카오에서 안드로이드에 발급한 access token을 서버에 넘기는 것은 권장되지 않는다고 들었습니다.).

클라이언트가 넘긴 정보가 정말 유효한 정보인지 검증을 할 필요가 없는건지, 검증을 한다면 어떤 방식으로 검증해야 하는지 궁금합니다.

안녕하세요.

Q. 카카오 sdk를 통해 카카오와 통신하는 일을 클라이언트에 위임하고 서버에서는 클라이언트에게 넘겨받는 정보만을 처리하는 방식을 권장하는 것 같습니다.

A. 네, 네이티브앱에서 SDK를 사용하는 경우 그렇습니다.


Q. 서비스 앱 어드민 키 방식’을 통해 유효한 회원 번호인지 검증을 하고 회원 가입을 진행하는 방식은 좋은 방식이 아닌가요?

A. 앱ID 유효성만 검증한다면 적절한 방식입니다. 다만, 요청 자체가 유효한지 검증하면 조금더 안전할 것 같습니다.

(1) OpenID Connect ID 토큰 발급하기 로 OIDC 설정을 활성화 하면, JWT 형태의 ID 토큰을 받을 수 있습니다.

ID 토큰을 백엔드에 함께 전달해서 회원 번호가 일치하는지 검증하면 좋을 것 같습니다.

(2) 앱에서 카카오 로그인 하기전 백엔드로 부터 허가 코드를 발급 받고, 로그인 후 허가 코드와 함께 서버에 전달하는 방법도 있습니다.

참고. PKCE 응용


Q. 카카오에서 안드로이드에 발급한 access token을 서버에 넘기는 것은 권장되지 않는다고 들었습니다.

A. 액세스토큰은 사용자의 정보 요청 등. 카카오 API 호출에 사용될 수 있으니 가급적 격리해서 사용하는 것을 권장하지만, 부득이하게 필요한 경우 적절한 보안 장치를 두어 전달해도 무방합니다.

참고 부탁드려요.