cognito와 oauth2.0

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

 

'프로젝트' 카테고리의 다른 글

실시간 통신을 위한 websocket 과 STOMP  (0) 2023.06.08
웹 소켓과 tcp/ip 소켓의 차이점  (0) 2023.06.07
프로젝트 인프라 구성  (0) 2023.04.04
filter, interceptor, argument resolver 의 역할과 차이  (0) 2023.03.06
세션 방식을 선택한 이유  (0) 2023.02.28
'프로젝트' 카테고리의 다른 글
  • 실시간 통신을 위한 websocket 과 STOMP
  • 웹 소켓과 tcp/ip 소켓의 차이점
  • 프로젝트 인프라 구성
  • filter, interceptor, argument resolver 의 역할과 차이
ompeom
ompeom
  • ompeom
    괴발개발 공부하는 블로그
    ompeom
  • 전체
    오늘
    어제
    • 분류 전체보기 (34)
      • 공부 (18)
        • Python (2)
        • Java (0)
        • Kotlin (14)
        • Spring batch (2)
        • Spring (0)
      • 기타 (8)
      • 프로젝트 (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    NextSTEP
    딕셔너리
    파이썬
    자료형
    TDD강의
    넥스트스탭
    내장함수
    Python
    세트
    튜플
    리스트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
ompeom
cognito와 oauth2.0
상단으로

티스토리툴바