AWS Cognito를 Python에서 처리

AWS Cognito를 Python에서 호출하려고하면 성대하게 빠졌습니다.


  • 라고 말하면 AWS Cognito를 Boto3을 통해 호출 할 때 비망록으로 남겨 둡니다

  • 사전 준비



    Cognito에 대한 액세스를 허용하는 IAM을 생성합니다.



    AWS Cognito에서 UserPool 생성


  • 우선 적당하게 진행해 간다





  • 이 앱 클라이언트를 작성할 때에 이하의 2점을 변경. (하마리 파트 1)
  • 클라이언트 시크릿 만들기 체크 해제
  • 시크릿이 있으면 패스워드로 승인할 수 없는 것 같다…

  • USER_PASSWORD_AUTH에 체크



  • 파이썬 설정



    버전


  • 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 두드린다.

  • 추가 (2019/1/26)



    Cognito의 update_at 유형


  • Cognito의 타입이 String 밖에 사용할 수 없다?
    update_at에 값을 넣을 때 형식 변환하지 않으면 boto3에서 오류가 반환됩니다.
    최종 선언 방법은 다음과str(int(time.time()))

  • 미래



    새로운 API를 사용할 때는 추가한다.

    좋은 웹페이지 즐겨찾기