top of page

아...로그인 기능 또 만들어야 돼? AWS Cognito로 시간 아껴드립니다.

AWS Cognito와 API Gateway를 이용하여 로그인 인증 시스템 구축하기

아...로그인 기능 또 만들어야 돼? AWS Cognito로 시간 아껴드립니다.


Written by Hyejin Jeon


안녕하세요, 스마일샤크의 전혜진입니다.


대부분의 서비스에서 공통적으로 필요한 로그인 기능 및 사용자 관리 기능을 한 방에 해결할 수 있다면 어떨까요?

기존에는 사용자 인증, 복잡한 로그인 로직, 소셜 로그인 연동을 일일이 코딩하거나, 스프링 시큐리티와 같은 프레임워크 + OAuth 라이브러리를 사용해 구현해야 했습니다.


AWS Cognito는 이러한 사용자 인증 시스템을 간단하게 구현할 수 있는 서비스입니다.

Cognito의 사용자 풀은 유저를 저장하고 관리하는 등의 데이터베이스 역할을 하므로 회원가입, 로그인 등의 기능을 쉽게 구현할 수 있습니다.

자격 증명 풀을 통해 소셜 로그인(Google, Facebook 등) 연동이 가능하고, JWT 토큰MFA 인증도 지원합니다.

로그인 화면 UI까지 지원한다는… AWS에서 애플리케이션을 운영할 예정이라면 Cognito를 사용해서 복잡한 인증 기능을 구현하는 시간을 대폭 줄일 수 있을 것 같습니다.

이번 블로그에서 구축할 아키텍처

구축할 아키텍처는 다음과 같습니다. 로그인 후 AWS Cognito를 통해 인증 토큰을 발급받고, 발급된 토큰을 통해 API를 호출하여 응답이 반환되는지 확인해 보겠습니다.


 

실습

1. AWS Cognito 설정

1-1. 사용자 풀 생성

① AWS Cognito 서비스로 이동 후 [사용자 풀 생성]을 클릭합니다. 로그인 옵션으로 [이메일]을 선택하고 다음으로 넘어갑니다.

AWS cognito 서비스 > 사용자 풀 생성 (로그인 옵션: 이메일)

② [암호 정책] 옵션은 기본 설정값으로 두고, 테스트 환경이기 떄문에 [MFA 없음]을 선택하고 [셀프 서비스 계정 복구]를 비활성화합니다.

암호정책: 기본값 설정, MFA 없음, 셀프 서비스 계정 복구 비활성화

③ 사용자가 회원 가입할 수 있도록 [셀프 등록]을 활성화하고, 이메일 인증 단계를 생략하기 위해 [메시지를 자동 전송하지 않음]을 선택합니다.

회원가입을 할 수 있도록 셀프 등록을 활성화하고, 인증 단계를 생략하기 위해 메시지를 자동 전송하지 않음을 선택합니다.

④ 이메일 전송 방식은 [Cognito를 사용하여 이메일 전송] 옵션을 선택하고 Cognito에서 제공하는 로그인 페이지를 사용하기 위해 [Congito 호스팅 UI 사용]을 체크합니다.

이메일 전송 방식은 [Cognito를 사용하여 이메일 전송] 옵션을 선택하고 Cognito에서 제공하는 로그인 페이지를 사용하기 위해 [Congito 호스팅 UI 사용]을 체크합니다.

⑤ 앱 클라이언트를 [퍼블릭 클라이언트]로 선택하고 사용자 풀을 생성합니다.


1-2. 사용자 추가

① 사용자 탭에서 사용자를 생성하거나 앱 클라이언트의 호스팅 UI에서 직접 사용자를 생성할 수 있습니다.

사용자 탭에서 사용자를 생성합니다.
앱 클라이언트의 호스팅 UI에서 직접 사용자를 생성합니다.

② [계정 확인]을 눌러 계정 상태를 활성화합니다.

계정 확인을 눌러 계정 상태를 활성화합니다.


2. API Gateway 구성

2-1. REST API 생성

① API Gateway 서비스로 이동 후 REST API를 생성합니다. 이때, 편의상 [예제 API]를 선택하여 생성합니다.

API Gateway > REST API 생성

2-2. 권한 부여자 생성

생성한 API의 [권한 부여자 생성] 버튼을 클릭합니다.

생성한 API의 [권한 부여자 생성] 버튼을 클릭합니다.

② 권한 부여자 유형으로 [Cognito]를 선택하고 이전 단계에서 만든 사용자 풀을 선택합니다. API 호출 시 헤더에 입력할 키값으로 토큰 소스에 [Authorization]을 입력합니다.

권한 부여자 유형으로 [Cognito]를 선택하고 이전 단계에서 만든 사용자 풀을 선택합니다. API 호출 시 헤더에 입력할 키값으로 토큰 소스에 [Authorization]을 입력합니다.

2-3. API 매서드에 권한 부여자 적용

API 리소스의 메서드 편집을 눌러 이전 단계에서 만든 권한 부여자를 선택합니다.

API 리소스의 메서드 편집을 눌러 이전 단계에서 만든 권한 부여자를 선택합니다.

② 변경 사항이 적용되도록 API를 스테이지에 배포합니다.

변경 사항이 적용되도록 API를 스테이지에 배포합니다.


3. Postman을 통한 API 호출 테스트

💡 Postman은 API 개발 및 테스트를 위한 툴로, 다양한 HTTP 요청을 보내고 응답을 확인할 수 있는 API 테스트 도구입니다. 브라우저나 개발자 도구를 사용하지 않고도 API 요청을 보내고 응답을 확인할 수 있어, 개발 및 테스트 과정에서 편리하게 사용할 수 있습니다.

3-1. 액세스 토큰 가져오기

Postman의 새 컬렉션을 열어 Authorization 탭을 선택합니다. 권한 유형을 OAuth 2.0으로 설정하고 URL은 다음과 같이 설정합니다.

  • Auth URL - {Cognito 도메인}/oauth2/authorize

  • Access Token URL - {Cognito 도메인}/oauth2/token

Postman의 새 컬렉션을 열어 Authorization 탭을 선택합니다. 권한 유형을 OAuth 2.0으로 설정하고 URL은 다음과 같이 설정합니다.

② [Get New Access Token]을 클릭하여 호스팅 UI 로그인 창이 열리면 Cognito 사용자 정보를 입력합니다.

[Get New Access Token]을 클릭하여 호스팅 UI 로그인 창이 열리면 Cognito 사용자 정보를 입력합니다.

③ 로그인 성공 시 여러 개의 토큰이 생성되는데, 이 중 id_token을 사용하여 API를 호출할 수 있습니다.

로그인 성공 시 여러 개의 토큰이 생성되는데, 이 중 id_token을 사용하여 API를 호출할 수 있습니다.

3-2. API 호출 테스트

새 탭을 열고 GET 요청 선택한 다음, 생성한 API(PetStore)의 경로를 입력합니다. 이 때, 토큰을 사용하지 않고 API를 호출하면 인증 오류가 발생합니다.

새 탭을 열고 GET 요청 선택한 다음, 생성한 API(PetStore)의 경로를 입력합니다

② HTTP 헤더의 {키:값}으로 {Authorization : id token}을 사용하여 API를 호출하면 성공적으로 응답이 반환됩니다.

HTTP 헤더의 {키:값}으로 {Authorization : id token}을 사용하여 API를 호출하면 성공적으로 응답이 반환됩니다.


마무리

대부분의 서비스에서 사용자 인증 및 관리 기능은 필수 불가결한 기능이지만 핵심 비즈니스 로직보다는 아무래도 중요성이 떨어집니다. 때문에 Cognito를 사용하여 인증과 인가 기능 구현에 들어가는 개발 비용과 시간을 절약하고, AWS의 기본적인 보안 기능으로 안전하고 일정한 로그인 기능을 빠르게 구현할 수 있습니다.


매월 최대 50,000명의 월간 활성 사용자(MAU)까지 무료입니다. 5만 명 이하의 사용자를 가진 소규모 비즈니스나 스타트업은 초기 비용 부담 없이 안전한 인증 시스템을 구축할 수 있겠네요.


비용이나 기능에 관한 자세한 정보는 아래 AWS 공식 문서를 참고해 주세요.

AWS Cognito란 무엇입니까?

조회수 127회댓글 0개

Comments


bottom of page