AWS Cognito는 웹 및 모바일 앱에 대한 인증, 권한 부여 및 사용자 관리를 제공하는 서비스 입니다.
직접 사용자의 이름(이메일, 휴대폰 번호 등) 을 사용하여 직접 로그인 하거나, Facebook, Amazon, Google 또는 Apple 같은 타사 로그인 또한 지원합니다.
Cognito에서는 두가지 구성요소가 존재합니다. 이번 예제에서 사용할 사용자 풀 그리고 자격 증명 풀 입니다.
쉽게 말해 사용자 풀은 우리가 흔히 웹사이트 혹은 서비스에서 사용하는 로그인 기능입니다.
자격 증명 풀은 AWS 서비스와 관련된 기능이기에, 이번 예제에서는 사용하지 않습니다.
출처: https://docs.aws.amazon.com/ko_kr/cognito/latest/developerguide/what-is-amazon-cognito.html
AWS 콘솔에 로그인 한 뒤 사용자 풀 관리에서 새로운 사용자 풀을 생성합니다.
사용자 풀에서 '사용자 풀 생성' 버튼을 클릭합니다.
기본값 검토 또는 설정을 순서대로 진행하기가 있는데, 기본값 검토로 빠르게 생성하여줍니다.
기타 필요한 설정들을 서비스에 맞게 설정하여 설정을 끝냅니다.
우선 파이썬 프로젝트 폴더를 생성하여 가상환경을 생성한 후 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/
...
# 시작한 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']}