본문 바로가기

ChatGPT/AWS Serverless

[AWS][Cognito] Express 그리고 Serverless Framework 연동하기 - 3

반응형

https://tobelinuxer.tistory.com/61

 

AWS Cognito와 Express 그리고 Serverless Framework 연동하기 - 2

https://tobelinuxer.tistory.com/60 AWS Cognito와 Express 그리고 Serverless Framework 연동하기 - 1 AWS Cognito와 서버리스 아키텍처를 이용하여 안전하고 효율적인 로그인 시스템을 구축하는 방법에 대한 글을 작성

tobelinuxer.tistory.com

 

이전 포스팅에 이어, 이 페이지에서는 6. AWS에 배포 및 테스트, 7. 결론을 다루도록 하겠습니다.


1. 서론

  • AWS Cognito와 서버리스 아키텍처를 이용한 로그인 시스템 구축의 필요성

2. 사용된 기술 및 라이브러리 소개

  • TypeScript, Serverless Framework, AWS Lambda, API Gateway, Cognito
  • 사용된 라이브러리: Express, Axios, jsonwebtoken, jwks-rsa 등

3. 프로젝트 구조 및 설정

  • 프로젝트 디렉토리 구조 설명
  • serverless.yml 파일 설정
  • TypeScript 설정

4. AWS Cognito를 사용하여 로그인 시스템을 구축하는 방법

  • Cognito 사용자 풀 생성 및 설정
  • libs/cognito.ts: Cognito 사용자 정보 조회 및 토큰 관련 함수 구현
  • 로그인 및 토큰 발급 과정 설명

5. Custom Authorizer를 이용한 토큰 검증 구현

  • libs/authorization.ts: 토큰 검증 및 권한 관리 함수 구현
  • auth 디렉토리의 각 Authorizer 핸들러 설명
  • 토큰 검증 과정 및 Authorizer 작동 원리

6. AWS에 배포 및 테스트

  • Serverless Framework를 이용한 배포 방법
  • 포된 API 엔드포인트를 이용한 로그인 시스템 테스트

7. 결론

  • 이번 포스트를 통해 구현한 인증 시스템의 요약
  • 보안, 확장성, 관리 등의 관점에서 추가로 고려해 볼 사항

6. AWS에 배포 및 테스트

 

6.1 오프라인 테스트

 

Serverless Framework의 serverless-offline 플러그인을 사용하면, 로컬에서 API Gateway와 Lambda 함수를 에뮬레이션하여 오프라인 테스트를 진행할 수 있습니다.

 

이를 통해 개발 과정에서 빠르게 피드백을 받을 수 있으며, 클라우드 환경으로 배포하기 전에 로컬에서 먼저 테스트를 해 볼 수 있습니다.

 

serverless-offline 패키지 설정이나 기타 설정은 앞 블로그 글을 참고해주세요.

 

sls offline 실행 화면

 

위 serverless-offline 실행 화면을 보시면, Serverless framework 파일에 설정에 따라 여러 함수가 생성 됨을 확인할 수 있습니다. 

 

이글에서는 여러 앤드포인트 중에 /dev/authorize, /dev/app-user-cookie 앤드포인트 두 개를 대상으로 테스트를 진행합니다.

 

앞선 글에서 언급한 대로 시나리오에 맞쳐 테스트 진행한 결과는 다음과 같습니다.


1. /dev/authorize/login 앤드포인트 호출

 

 

1.1 쿠키에 credentials가 없다면 Cognito Authorization URL로 리다이렉트를 실행합니다.

 

 

1.2 쿠키에 credentials가 있는 경우, 포함된 access_token과 refresh_token을 기반으로 access_token의 만료 여부를 확인합니다. 만약 만료된 경우, refresh_token을 사용하여 새로운 credentials를 받아와 쿠키에 저장한 다음, /dev/app-user-cookie/profile로 리다이렉트를 실행합니다. 이후 4번 과정으로 이동합니다.

 


2. Cognito Authorization URL 접속 및 로그인

 

2.1 사용자는 Cognito에서 제공하는 로그인 페이지에서 자신의 인증 정보를 입력합니다.



2.2 정상적으로 로그인이 완료되면, Cognito는 사전 설정된 Redirect URI로 사용자를 리다이렉트시킵니다. 이때, 인증 코드가 URL의 query parameter로 포함됩니다.

login 이후 cognito authorize > callback > profile 순으로 redirect 되는 모습


3. /dev/authorize/callback 앤드포인트 호출

 

3.1 사용자가 리다이렉트된 페이지에서 /dev/authorize/callback 앤드포인트가 호출됩니다. 이때, 인증 코드가 함께 전달됩니다.



3.2 /dev/authorize/callback 앤드포인트에서는 인증 코드를 사용하여 Cognito로부터 액세스 토큰을 요청합니다.



3.3 액세스 토큰을 성공적으로 받으면, 이를 쿠키에 저장하고 사용자를 원래 요청한 페이지로 리다이렉트시킵니다.

localhost에 쿠키가 설정된 모습

 


4. /dev/app-user-cookie/profile 앤드포인트 호출


4.1 쿠키에 저장된 액세스 토큰을 사용하여 /dev/app-user-cookie/profile 앤드포인트에 요청을 보냅니다.



4.2 app-user-cookie 앤드포인트에서는 custom authorizer가 쿠키에 포함된 액세스 토큰을 검증합니다.



4.3 토큰이 유효하다면, 요청은 성공적으로 처리되고 응답을 반환합니다. 토큰이 유효하지 않거나 없는 경우, 사용자는 인증되지 않은 것으로 간주되며 적절한 오류 메시지가 반환됩니다.



이렇게 시나리오를 따라가면서 테스트를 진행하고, 예상되는 결과가 나오는지 확인할 수 있습니다. 

 

만약 예상과 다른 결과가 발생하면, 코드를 수정하여 문제를 해결한 후 다시 테스트를 수행합니다. 

 

이 과정을 반복하면서 각 시나리오에 대한 정확한 동작을 보장할 수 있습니다.

 


 

7. 결론

 

이 포스트를 통해 TypeScript와 Serverless Framework를 사용하여 AWS Cognito와 연동하는 로그인 시스템을 구축하는 방법, Custom Authorizer를 이용한 토큰 검증 구현 방법, 그리고 배포 및 테스트 과정에 대해 알아보았습니다. 

 

이러한 기술을 사용함으로써 개발자는 안전하고 확장 가능한 인증 및 인가 기능을 갖춘 서비스를 구축할 수 있습니다.



또한, 이 글에서 소개한 접근 방식은 블로그 서비스, 전자 상거래 사이트, 웹 애플리케이션 등 다양한 프로젝트에 적용할 수 있습니다. 

 

AWS Cognito는 많은 개발자가 이미 사용하고 있는 강력한 인증 서비스로, 이를 활용하면 훨씬 효율적이고 안전한 인증 시스템을 구축할 수 있습니다.

 

이번 포스트를 통해 배운 내용을 활용하여, 각자의 프로젝트에 맞게 서버리스 인증 및 인가 시스템을 구축해 보시길 바랍니다. 

 

AWS Cognito와 TypeScript, Serverless Framework를 함께 사용함으로써 생산성과 보안성을 높일 수 있습니다.

마지막으로, 이 글에서 소개한 기술과 구현 방법을 다양한 경우에 적용할 수 있기 때문에, 프로젝트의 요구 사항과 구조에 따라 유연하게 조정하여 사용하실 수 있습니다.



지금까지의 과정을 통해, AWS Cognito와 함께 사용할 수 있는 서버리스 인증 시스템 구축에 대한 전반적인 이해를 얻으셨길 바랍니다. 

 

이를 바탕으로, 각자의 프로젝트에서 보다 효율적인 인증 및 인가 처리를 구현할 수 있을 것입니다.

 

 

지금 보시는 글은 ChatGPT의 도움을 받아 작성되었습니다.

반응형