AWS Boto / Warrant库:SRP身份验证和凭据错误

问题描述 投票:4回答:2

我已经坚持了下一个问题很长一段时间了。在Python中,我希望用户根据使用srp身份验证的AWS cognito-identity-pool中的用户名和密码来检索令牌。有了这个令牌,我希望用户将数据上传到s3。

这是我使用的代码(来自权证库)的一部分:https://github.com/capless/warrant

    self.client = boto3.client('cognito-idp', region_name="us-east-1")
    response = boto_client.initiate_auth(
        AuthFlow='USER_SRP_AUTH',
        AuthParameters=auth_params,
        ClientId=self.client_id
    )


def get_auth_params(self):
    auth_params = {'USERNAME': self.username,
                   'SRP_A': long_to_hex(self.large_a_value)}
    if self.client_secret is not None:
        auth_params.update({
            "SECRET_HASH":
            self.get_secret_hash(self.username,self.client_id, self.client_secret)})
    return auth_params

但是,我继续得到:

botocore\auth.py", line 352, in add_auth raise NoCredentialsError
botocore.exceptions.NoCredentialsError: Unable to locate credentials

通过在.aws / credentials文件中添加凭据,我能够摆脱这个错误。但这不符合该计划的目的。看起来在权证或botocore库中存在错误,并且它继续尝试使用凭证文件中的AWS Access Key ID和AWS Secret Access Key,而不是使用给定的凭据(用户名和密码)。

任何帮助表示赞赏

python amazon-web-services boto3 amazon-cognito
2个回答
3
投票

我和Cognito团队在一起。 startup auth是一个未经身份验证的调用,因此它不应要求您提供AWS凭据。服务端点不会验证这些调用的sigv4签名。

话虽这么说,一些客户端库具有某些特性,因为您需要提供一些虚拟凭证,否则客户端库将抛出异常。但是,您可以为凭据提供任何内容。


0
投票

AWS Access Key ID和AWS Secret Access Key与用户名和密码完全不同。

Boto3客户端必须连接到AWS服务端点(在您的情况下:cognito-idp.us-east-1.amazonaws.com)才能执行任何API。在执行API之前,必须提供API凭证(密钥+密钥)来验证您的AWS账户。如果没有验证您的帐户,则无法调用cognito-idp API。

有一个AWS账户(密钥/密钥),但可以有多个用户(用户名/密码)。

© www.soinside.com 2019 - 2024. All rights reserved.