AWS Cognito + DRF 로그인 구현하기(with React)(1)

Jongwho Park·2021년 4월 29일
0

CognitoWithDRF

목록 보기
1/3

AWS Cognito?

AWS Cognito는 웹 및 모바일 앱에 대한 인증, 권한 부여 및 사용자 관리를 제공하는 서비스 입니다.
직접 사용자의 이름(이메일, 휴대폰 번호 등) 을 사용하여 직접 로그인 하거나, Facebook, Amazon, Google 또는 Apple 같은 타사 로그인 또한 지원합니다.

사용자 풀 ? 자격 증명 풀?

Cognito에서는 두가지 구성요소가 존재합니다. 이번 예제에서 사용할 사용자 풀 그리고 자격 증명 풀 입니다.
쉽게 말해 사용자 풀은 우리가 흔히 웹사이트 혹은 서비스에서 사용하는 로그인 기능입니다.
자격 증명 풀은 AWS 서비스와 관련된 기능이기에, 이번 예제에서는 사용하지 않습니다.

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

AWS Cognito 세팅

Cognito 사용 설정

AWS 콘솔에 로그인 한 뒤 사용자 풀 관리에서 새로운 사용자 풀을 생성합니다.

사용자 풀에서 '사용자 풀 생성' 버튼을 클릭합니다.

기본값 검토 또는 설정을 순서대로 진행하기가 있는데, 기본값 검토로 빠르게 생성하여줍니다.

기타 필요한 설정들을 서비스에 맞게 설정하여 설정을 끝냅니다.

Django REST Framework 설정

우선 파이썬 프로젝트 폴더를 생성하여 가상환경을 생성한 후 Django REST Framework를 생성합니다.

pip install django
pip install djangorestframework
#추가적으로 AWS와 통신할 수 있도록 requests 모듈도 설치합니다.
pip install requests
#JWT 토큰을 사용하기 위해 jwt 모듈을 추가합니다.
pip install drf-jwt

새로운 프로젝트를 생성 후 앱을 생성합니다.

django-admin startproject cognito_login
cd cognito_login
django-admin startapp app_account

출처: https://www.django-rest-framework.org/tutorial/quickstart/

settings.py 설정 - REST 기본 설정

...
# 시작한 APP을 추가합니다.
INSTALLED_APPS = [
  ...
  '<app name>'
]
# Middleware에 Remoteuser를 추가합니다.
MIDDLEWARE = [
  ...
  django.contrib.auth.middleware.RemoteUserMiddleware  # RemoteUserMiddleware
]
# Customize Settings

REST_FRAMEWORK = {
  'DEFAULT_AUTHENTICATION_CLASSES': (
      'rest_framework_jwt.authentication.JSONWebTokenAuthentication'
  )
}
# Cognito Setting
COGNITO_AWS_REGION = '<cognito 설정에서 확인할  있는 REGION>'
COGNITO_AWS_USER_POOL = '<cognito 설정에서 확인할  있는 유저  아이디>'
COGNITO_AUDIENCE = None
COGNITO_POOL_URL = None

# AWS Cognito에서 JWT 토큰을 Decode하는 API URL
COGNITO_POOL_URL = f'https://cognito-idp.{COGNITO_AWS_REGION}.amazonaws.com/{COGNITO_AWS_USER_POOL}/.well-known/jwks/json'
jwks = requests.get(pool_jwks_url).json()
rsa_keys = {key['kid']: json.dumps(key) for key in jwks['keys']}
profile
Hello Data and Python.

0개의 댓글