괴발개발 공부하는 블로그

cognito와 oauth2.0 본문

프로젝트

cognito와 oauth2.0

ompeom 2023. 5. 24. 10:48

요새 팀원들과 사이드 프로젝트를 수행하고 있는데, 로그인할 때 aws cognito를 사용하기로 했다.

난 이번에 처음 들어보는 것이여서 매우 생소했다.

 

cognito는 aws 에서 제공하는 인증과 사용자 관리 솔루션이다. cognito 에 대해 알아보기 전에 나는 oauth도 정확히 무엇인지 몰랐다. 그냥 소셜 로그인 정도?? 그래서 oauth 에 대해서 먼저 공부해보았다. 그리고 내가 기억하기 위해 기록을 남긴다.

 

OAuth 는 무엇이며 왜 써야할까?

OAuth 의 핵심은 사용자의 아이디, 비밀번호를 공유하지 않고 서드파티 애플리케이션에 제한적 접근할 수 있도록 하는 것이다.

 

예를 들어 우리 프로젝트에 구글 로그인을 넣고 싶다면 기본적으로 유저의 구글 아이디와 비밀번호를 공유 받아야 한다. 그러나 유저 입장에서, 그리고 구글 입장에서 생각해보면 제 3자에게 아이디와 비밀번호를 제공하는 것은 매우 위험한 일이다. 따라서 OAuth는 사용자가 구글에게 자신의 인증 정보를 제공하고 인증을 받은 후 애플리케이션에 대한 액세스 토큰을 발급받는다. 사용자는 개인적인 정보를 공유하지 않고, 이 액세스 토큰을 이용해서 서드파티 애플리케이션에게 제한적인 권한을 부여할 수 있다.

 

추가적으로 개발자의 입장에서 로그인 및 회원가입을 위해 사용자의 개인정보를 저장하고 관리하면서 따라오는 이슈들이 (구글, 페이스북 등에 위임함으로써) 줄어드는 이점이 있다.

 

OAuth 의 terminology

  • Resource Owner: 리소스에 대한 액세스 권한을 부여할 수 있는 주체 (= user) 
  • Client: 리소스 오너를 대신하여 보호된 리소스에 대해서 접근 요청하는 애플리케이션 (= third party application)
  • Resource Server: 보호된 리소스를 호스팅하는 서버 (= google)
  • Authorization Server: 리소스 오너를 인증하고 인증을 받은 후 액세스 토큰을 발행하는 서버

 

OAuth 의 flow

1. 애플리케이션 내에 유저가 로그인 요청

2. 애플리케이션은 유저를 authorization server 로 리다이렉트

3. authorization server 는 사용자를 로그인 및 권한 부여 프롬프트로 리다이렉트

4. 유저가 로그인 인증

5. authorization server 는 일회용 인증 코드와 함께 애플리케이션으로 리다이렉트

6. 인증 코드, 앱의 클라이언트 아이디, 클라이언트 시크릿 키 같은 자격 증명을 authorization server 로 전송

7. authorization server 는 받은 인증 데이터 검증

8. authorization server 는 토큰 응답

9. 애플리케이션은 액세스 토큰으로 user 의 액세스 정보 요청

10. 요청된 데이터 응답

 

Amazon Cognito 의 기능과 이점

Cognito는 사용자 인증, 권한 부여, 사용자 관리를 제공하는 서비스이다. Cognito 는 사용자 풀이라는 것을 제공하는데, 말 그대로 사용자를 직접 관리해준다.

 

  • 소셜 로그인을 통합하여 제공할 수 있다. Facebook, Amazon, Google 같은 소셜 미디어를 통한 로그인을 지원한다.
  • 회원가입 및 로그인을 Cognito 에서 관리해주기 때문에 개발자는 Resource Server 만 관리하면 된다.
  • 자격 증명 풀을 함께 사용하면, 로그인 시 다른 AWS 서비스와 함께 사용할 수 있다.

 

나는 처음에 OAuth 2.0 에서 사용자의 액세스 토큰 정보를 Resource Server 에 저장한다고 하여 사용자 풀을 사용하면 Resource Server 를 대체하는 것이라 생각했다. 그러나 사용자 풀은 사용자 인증, 관리에 사용되는 서비스이다. 사용자 인증 및 액세스 토큰 발급 처리만 사용자 풀에서 처리해주고 Resource Server 는 실제 리소스에 대한 접근 제어나 다른 처리 등을 할 때 사용할 수 있다.

 

출처

유튜브 생활코딩

https://www.youtube.com/watch?v=hm2r6LtUbk8&list=PLuHgQVnccGMA4guyznDlykFJh28_R08Q- 

https://auth0.com/docs/get-started/authentication-and-authorization-flow/which-oauth-2-0-flow-should-i-use

 

Auth0

Get started using Auth0. Implement authentication for any kind of application in minutes.

auth0.com

https://docs.aws.amazon.com/ko_kr/cognito/latest/developerguide/what-is-amazon-cognito.html

 

Amazon Cognito란 무엇입니까? - Amazon Cognito

Amazon Cognito란 무엇입니까? Amazon Cognito는 웹 및 모바일 앱에 대한 인증, 권한 부여 및 사용자 관리를 제공합니다. 사용자는 사용자 이름과 암호를 사용하여 직접 로그인하거나 Facebook, Amazon, Google

docs.aws.amazon.com

 

Comments