it-roy-ru.com

AWS Cognito Authentication USER_PASSWORD_AUTH поток не включен для этого клиента

У меня есть мобильное приложение с пулом пользователей (имя пользователя и пароль). Приложение отлично работает с AWS-Ampify SDK. Но хотел перенести код в Lambdas. Итак, я написал следующую лямбду, используя Boto3.

Вот лямбда:

import boto3

def lambda_handler(event, context):
    client = boto3.client('cognito-idp')
    response = client.initiate_auth(
        ClientId='xxxxxxxxxxxxxx',
        AuthFlow='USER_PASSWORD_AUTH',
        AuthParameters={
            'USERNAME': 'xxxxxx',
            'PASSWORD': 'xxxxxx'
        }
    )
    return response

Пробовал admin_initiate_auth тоже. 

import boto3
def lambda_handler(event, context):
    client = boto3.client('cognito-idp')
    response = client.initiate_auth(
        UserPoolId='xxxxxxxxx',
        ClientId='xxxxxxxxxxxxxx',
        AuthFlow='USER_PASSWORD_AUTH',
        AuthParameters={
            'USERNAME': 'xxxxxx',
            'PASSWORD': 'xxxxxx'
        }
    )
    return response

Вот ошибка, которую я получаю.

Произошла ошибка (InvalidParameterException) при вызове Операция InitiateAuth: поток USER_PASSWORD_AUTH для этого не включен client: InvalidParameterException Traceback (последний вызов был последним):
Файл "/var/task/lambda_function.py", строка 12, в lambda_handler «ПАРОЛЬ»: файл «xxxxx» «/var/runtime/botocore/client.py», строка 317, в _api_call вернуть файл self._make_api_call (имя_операции, kwargs) Файл "/var/runtime/botocore/client.py", строка 615, в _make_api_call поднять error_class (parsed_response, operation_name) InvalidParameterException: произошла ошибка (InvalidParameterException) при вызове операции InitiateAuth: USER_PASSWORD_AUTH поток не включен для этого клиента

Какие-нибудь мысли?

6
user9374347

Понял это. У меня есть пул пользователей goto -> клиенты приложения -> показать детали -> Включить поток имени пользователя и пароля (не SRP) для аутентификации на основе приложения (USER_PASSWORD_AUTH).

Это исправило это.

16
user9374347

Я понял это. Несмотря на AuthFlow, передайте ExplicitAuthFlows, тогда он должен работать . `

import boto3
def lambda_handler(event, context):
    client = boto3.client('cognito-idp')
    response = client.initiate_auth(
        UserPoolId='xxxxxxxxx',
        ClientId='xxxxxxxxxxxxxx',
        ExplicitAuthFlows='USER_PASSWORD_AUTH',
        AuthParameters={
            'USERNAME': 'xxxxxx',
            'PASSWORD': 'xxxxxx'
        }
    )
    return response

`

0
Afsheen. Nazish

Для меня я обнаружил, что моим учетным данным нужен hmac, вот класс на тот случай, если он кому-нибудь пригодится.

import boto3
import boto3.session
import hmac, base64, hashlib
from botocore.client import ClientMeta

class AwsAuth(object):
    '''
    classdocs
    '''

    def gettoken(self):
        if self.token:
            return self.token
        else:
            return False

    def connect(self):

        if not self.username:
            self.username = raw_input("Username: ")

        if not self.password:
            self.password = raw_input("Password: ")

        digest = self.gethmacdigest(self.username)

        response = self.client.initiate_auth(
            ClientId=self.clientid,
            AuthFlow='USER_PASSWORD_AUTH',
            AuthParameters={
                'USERNAME': self.username,
                'PASSWORD': self.password,
                'SECRET_HASH': digest
            },
            ClientMetadata={
                'UserPoolId': self.userpoolid
            }
        )
        self.token = response
        return response

    def gethmacdigest(self, username):

        message = username + self.clientid
        Dig = hmac.new(self.clientsecret, msg=message.encode('UTF-8'), digestmod=hashlib.sha256).digest()    
        return base64.b64encode(Dig).decode()


    def __init__(self, path, url, fileout, filein, userpoolid, clientid, clientsecret, region, username = None, password = None):
        '''
        Constructor
        '''

        #boto3.set_stream_logger('botocore', level="DEBUG")

        self.path = path
        self.url = url
        self.fileout = fileout
        self.filein = filein
        self.userpoolid = userpoolid
        self.clientid = clientid
        self.clientsecret = clientsecret
        self.region = region
        self.token = ""

        boto3.setup_default_session(region_name=region) 

        self.client = boto3.client('cognito-idp')
        if username is not None:
            self.username = username
        else:
            self.username = None
        if password is not None:
            self.password = password
        else:
            self.password = None
0
JazzDeben