繁体   English   中英

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

[英]AWS Boto / Warrant library: SRP authentication and credentials error

我已经被困在以下问题上很长一段时间了。 在 Python 中,我希望用户根据他们的用户名和密码从 AWS 认知身份池中检索令牌,使用 srp 身份验证。 有了这个令牌,我希望用户将数据上传到 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 访问密钥 ID 和 AWS 秘密访问密钥,而不是使用给定的凭证(用户名和密码)。

任何帮助表示赞赏

我加入了 Cognito 团队。 启动身份验证是一个未经身份验证的调用,因此它不应该要求您提供 AWS 凭证。 服务端点不会验证这些调用的 sigv4 签名。

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

我也遇到了这个,使用权证。

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

import boto3
from botocore import UNSIGNED
from botocore.config import Config

client = boto3.client('cognito-idp', region_name='us-east-1', config=Config(signature_version=UNSIGNED))

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 账户(密钥/秘密),但可以有多个用户(用户名/密码)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM