본문 바로가기

프로젝트/인스타그램 클론코딩

[인스타그램 클론코딩] API 인증 구조

사용자 데이터를 처리할 백엔드(Back-End)는 누구나 사용할 수 있는 API로그인한 사용자가 사용할 수 있는 API구분하여 처리할 수 있어야 합니다.

사용자가 AWS Cognito에 로그인하면, Cognito는 ID, Access, Refresh 토큰을 발급해 줍니다.

ID 토큰은 Cognito에 가입한 사용자 정보를 암호화한 문자열이고, Access 토큰은 해당 Cognito 풀에 가입한 사용자의 권한을 암호화한 문자열입니다. 마지막으로 Refresh 토큰은 ID 토큰과 Access 토큰을 갱신하기 위해 사용합니다.

갱신은 AWS Amplify가 Refresh 토큰을 사용하여 자동으로 관리해 주기 때문에 신경쓰지 않아도 됩니다.

그리고 클라이언트(앱, 웹)에서 로그인한 사용자 정보를 사용하여 AWS 서비스에 직접 접속할 것이 아니기 때문에 Access 토큰도 필요 없습니다.

클라이언트에서 API 요청을 할 때, Amplify로 부터 ID 토큰만 추출한 후 headers.authorization에 담아서 보내기만 하면 됩니다.

백엔드는 Cognito 풀에 접속하여 클라이언트에서 전송한 ID 토큰이 유효한지 확인하고, 사용자 정보(userName, 성, 이름 이메일)로 변환합니다.

마지막으로 변환한 사용자 정보 중 userName을 사용하여 백엔드에 연결된 데이터베이스에서 사용자를 찾고, 나머지 사용자 정보(이메일)가 일치하는지 확인하여 인증을 마무리 합니다. 

프론트앤드(앱, 웹)와 백엔드에서 실제로 어떻게 구현했는지는 리액트, 리액트 네이티브, 데이터베이스 카테고리에서 더 자세히 설명하겠습니다.

Lambda 사용자 인증