当使用preferred_username作为别名时,Boto3 initialize_auth引发NotAuthorizedException异常

时间:2018-07-23 05:37:48

标签: amazon-web-services authentication amazon-cognito

我在使用AWS CognitoIDP时遇到了一些麻烦。正如发布的here一样,我已经将preferred_username设置为别名,但是在注册用户并设置他/她的preferred_username后,我无法使用密码登录。

我创建了一个带有preferred_username和用户名作为内部UUID字符串的用户。该用户反映在cognito用户池中,并使用preSignUp触发器进行确认。

注册模块

def sign_up(self, uuid_username, username, password):
    self.cognito_client.sign_up(
        ClientId=self.cpcid,
        SecretHash=self.get_secret_hash(uuid_username),
        Username=uuid_username,
        Password=password
    )
    user_attributes = [
        {
            'Name': CognitoAttr.PREFERRED_USERNAME.value,
            'Value': username
        }
    ]
    self.cognito_client.admin_update_user_attributes(
        UserPoolId=self.cpid,
        Username=username,
        UserAttributes=user_attributes
    )
    return

登录模块:

def sign_in(self, username, password, handle_exception=True, **kwargs):
"""

:param username: preferred_username/username of user
:param password: password of user
:param handle_exception: if false, raises cognito exception
:param kwargs:
:return:
"""
try:
    LOGGER.info("Initiate Auth Started")

    response = self.cognito_client.initiate_auth(
        AuthFlow='USER_PASSWORD_AUTH', # with CUSTOM_AUTH, it's working because of defineAuth trigger
        AuthParameters={
            'USERNAME': username,
            'PASSWORD': password,
            'SECRET_HASH': self.get_secret_hash(username)
        },
        ClientId=self.cpcid,
    )
    LOGGER.info("Initiate Auth Ended")
    return self.encrypt_cognito_tokens(
        response["AuthenticationResult"]
    )
except ClientError as err:
    if not handle_exception:
        raise err
    return self.handle_boto3_exception(err)

不起作用

上下文:USER_PASSWORD_AUTH流和登录名(boto3的initiate_auth)以及preferred_username作为密码输入到username参数。

错误:NotAuthorizedException:调用InitiateAuth操作时发生错误(NotAuthorizedException):错误的用户名或密码。

工作

上下文:设置一个defineAuthLambda函数,将issueTokens设置为True,并使用CUSTOM_AUTH流登录(boto3的initiate_auth),得到{{ 1}}或preferred_username作为用户名的输入(给出令牌响应)。

此外,Cognito boto3的username还返回使用用户名和Preferred_username的响应。

有人可以帮我解决我可能做错的事情吗?

0 个答案:

没有答案