백엔드에서 유효한 클라이언트 요청 구분 방법

안녕하세요! 검색을 통해서 들어오게 됐습니다. 저는 백엔드 개발자인데, 회사에서 프론트 개발자와 협업 중입니다.

제가 생각한 구성 요소는 총 세 가지로, 카카오 인증 서버 (Authentication Server: AS), 제가 개발 중인 서비스 (Resource Server: RS), 클라이언트입니다.

RS 는 클라이언트로부터 요청을 받을 때, 이 요청이 실제 카카오 사용자인지, 아닌지 구분하기 위해서 uid 말고 다른 것도 필요하다고 생각합니다. 그렇기 때문에 클라이언트는 RS api 를 요청할 때 access_token 을 요청에 담아서 보내고, RS 는 이 access_token 이 유효한지 체크하기 위해 카카오 AS api 를 호출해서 확인한 후 클라이언트에 응답을 줘야 합니다. Access_token 이 유효한지 체크하는 절차가 없다면, RS 입장에서는 악의적인 요청에 대응할 수가 없다고 생각합니다.

그런데 답변해주신 내용을 보니, 클라이언트는 access_token 을 RS 로 넘기면 안 된다고 하신 거 같습니다. 그렇다면 RS 는 어떻게 요청을 validation 할 수 있을까요? 혹시 카카오 AS 와는 무관한 사내용 인증 서버를 따로 만들어야 하는 것일까요?

미리 감사드립니다.

안녕하세요.

네이티브 앱에서 제공되는 카카오 로그인 SDK를 사용하면, SDK 자체에서 접근 토큰(access token)이 발급됩니다.
이 방식은 웹 기반의 redirect_uri 방식을 사용하지 않기 때문에, 보통 서비스 측에서 회원가입이나 권한 부여(인가)를 처리하기 위해 추가적인 API 요청이 필요합니다.

이러한 추가적인 API요청 처리를 위해 백엔드에서는 이 것이 유효한 요청인지 판단하실 필요가 있는데요
이를 위해 보통 id_token을 전달 합니다.

백엔드에서는 전달된 id_token이 유효한지 검증하고 id_token에 포함된 sub(회원번호)로 사용자 정보를 조회하여 회원 가입 처리 및 인가처리를 마무리 합니다.