AWS CognitoをPythonから扱う
AWS CognitoをPythonから扱う:
AWS CognitoをPythonから呼び出そうとしたら盛大にハマった
- と言うことでAWS CognitoをBoto3経由で呼び出す時の備忘録として残しておく
事前準備
Cognitoへのアクセスを許可したIAMを作成しておく
AWS CognitoでUserPoolを作成する
Python設定
バージョン
- Python : 3.6.0
- botocore : 1.12.83
ユーザ作成
import boto3 def cognito_auth(username, email, gender, birthday, nickname): # 認証開始 try: aws_client = boto3.client('cognito-idp', region_name = 'ap-northeast-1', aws_access_key_id = '***', aws_secret_access_key = '***', ) # ユーザー作成 aws_result = aws_client.admin_create_user( # cognito設定時のユーザープールID UserPoolId='***', Username=username, UserAttributes=[ { 'Name': 'email', 'Value': email }, { 'Name': 'gender', 'Value': gender }, { 'Name': 'birthdate', 'Value': birthdate }, { 'Name': 'nickname', 'Value': nickname }, ], # Mailに初期パスワードを送信する DesiredDeliveryMediums=['EMAIL'] ) # 認証完了 print(aws_result) except: # 認証失敗 print('Error') cognito_auth('username', 'email', 'gender', 'birthdate', 'nickname')
承認要求
response = aws_client.initiate_auth( # PASSWORDによる承認 AuthFlow='USER_PASSWORD_AUTH', AuthParameters={ 'USERNAME': '***', 'PASSWORD': '***' }, ClientId='***' ) print(response)
承認要求への返答
- 上のプログラムを実行後に帰ってくるChallengeName, Sessionを利用して以下を実行する
- 今回はChallengeName='NEW_PASSWORD_REQUIRED'
response = aws_client.respond_to_auth_challenge( ClientId='***', ChallengeName='ChallengeName', Session='***', ChallengeResponses={ 'NEW_PASSWORD': 'NEW_PASSWORD', 'USERNAME': 'USERNAME' } ) print(response)
- ここまで実行するとACCESS_TOKENがAWSから吐き出される。
- このACCESS_TOKENを使って色々API叩ける。
コメント
コメントを投稿