AWS Cognito를 통해 임시 AWS credentials를 발급받는 Python 예제 코드입니다.
ADMIN_NO_SRP_AUTH 방식을 사용하기 때문에 AWS credentials가 제공된 환경에서 동작합니다.
Pre-Requirements
- AWS Cognito의 User Pool과 Identity Pool이 생성되어 있어야합니다.
- User Pool App을 생성할 때 Generate client secret 옵션이 비활성화되어야 합니다.
- User Pool App의 ADMIN_NO_SRP_AUTH 옵션이 활성화되어야 합니다.
Auth Flow
# -*- coding: utf-8 -*-
import boto3
class Cognito():
region = 'ap-northeast-2'
user_pool_id = 'ap-northeast-2_xxxxxxxxx'
app_client_id = 'hjohd8ijicoxxxxxxxxxxxxxx'
identity_pool_id = 'ap-northeast-2:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
account_id = 'xxxxxxxxxxxx'
def sign_up(self, username, password, email):
idp_client = boto3.client('cognito-idp')
resp = idp_client.sign_up(ClientId=self.app_client_id,
Username=username,
Password=password,
UserAttributes=[{'Name': 'email', 'Value': email}])
return resp
def confirm_sign_up(self, username, confirm_code):
idp_client = boto3.client('cognito-idp')
resp = idp_client.confirm_sign_up(ClientId=self.app_client_id,
Username=username,
ConfirmationCode=confirm_code)
return resp
def sign_in_admin(self, username, password):
# Get ID Token
idp_client = boto3.client('cognito-idp')
resp = idp_client.admin_initiate_auth(UserPoolId=self.user_pool_id,
ClientId=self.app_client_id,
AuthFlow='ADMIN_NO_SRP_AUTH',
AuthParameters={'USERNAME': username,'PASSWORD': password})
provider = 'cognito-idp.%s.amazonaws.com/%s' % (self.region, self.user_pool_id)
token = resp['AuthenticationResult']['IdToken']
# Get IdentityId
ci_client = boto3.client('cognito-identity')
resp = ci_client.get_id(AccountId=self.account_id,
IdentityPoolId=self.identity_pool_id,
Logins={provider:token})
# Get Credentials
resp = ci_client.get_credentials_for_identity(IdentityId=resp['IdentityId'],
Logins={provider: token})
return resp
'Python' 카테고리의 다른 글
윈도우에서 python mysqlclient 패키지 설치하기 (0) | 2017.12.22 |
---|---|
[Python] sqlalchemy "Mysql Gone Away" 오류 (0) | 2017.05.22 |
[python] 트래픽 초과 시 메일 발송하기 (0) | 2016.12.01 |
python 스크립트 데몬으로 실행하기 (0) | 2016.05.09 |
Redis를 DB Table처럼 활용하기 (0) | 2016.05.04 |