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

时间:2017-12-16 20:32:39

标签: python amazon-web-services boto3 amazon-cognito

我已经坚持了下面这个问题很长一段时间了。在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,而不是使用给定的凭据(用户名和密码)。

感谢任何帮助

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

Boto3客户端必须连接到AWS服务端点(在您的情况下:cognito-idp)才能执行任何API。在执行API之前,必须提供API凭证(密钥+密钥)来验证您的AWS账户。如果不验证您的帐户,则无法拨打SharedPreferences API。

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

答案 2 :(得分:0)

我也使用手令碰到了这个问题。

问题是boto3库正在尝试将请求签名到aws,但不应将此请求签名。为防止这种情况,请使用不指定签名的配置创建身份池客户端。

A.T @ B @ A