Boto3 - botocore.errorfactory.NotAuthorizedException

标签 boto3

在python3中使用boto3和warrant。 headless 系统。尝试使用授权的 ASWSRP 使用 python 脚本登录。使用用户池存在更改临时密码的问题。所以......我有代码首先尝试临时密码,当失败时它切换到尝试永久密码。我遇到了几个不同的问题:

1)更改临时密码并再次运行脚本后,出现异常:

botocore.errorfactory.NotAuthorizedException



我似乎无法从 boto3 或 botocore 导入该异常。我如何捕获该异常?

2) 我有时会尝试使用过多的密码。

An error occurred (NotAuthorizedException) when calling the InitiateAuth operation: Password attempts exceeded



显然我需要等待一段时间。有人知道那是什么吗?该时间段可以在我的用户池或帐户中设置吗?

代码:
import boto3
from warrant.aws_srp import AWSSRP
from warrant.exceptions import ForceChangePasswordException

userName = 'XXXXXXXX'
tempPassword = 'XXXXXXXX'
poolId = 'us-east-1_XXXXXXXX'
poolRegion = 'us-east-1'
clientId = 'XXXXXXXXXXXXXXXXXXXXXXXXXX'
#clientSecret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
client = None
finalPassword = "YYYYYYYYY"

try:
    client = boto3.client('cognito-idp')
    aws = AWSSRP(
        userName,
        tempPassword,
        poolId,
        clientId,
        client=None)
    tokens = aws.authenticate_user()
except ForceChangePasswordException:
    aws.set_new_password_challenge(finalPassword, client=None)
    aws = AWSSRP(
        userName,
        finalPassword,
        poolId,
        clientId,
        client=None)
    tokens = aws.authenticate_user()
except Exception as e: 
    print(str(e))

另外,我宁愿先尝试最终密码,如果这不起作用,则使用临时密码,更改密码,然后重试最终密码。我仍然需要通过:

botocore.errorfactory.NotAuthorizedException

最佳答案

要回答您的第一个问题(如何捕获 boto3 异常),您必须通过 CognitoIdentityProvider Client 对象调用它:

import boto3
from warrant.aws_srp import AWSSRP

...

try:
    client = boto3.client('cognito-idp')
    aws = AWSSRP(
            userName,
            tempPassword,
            poolId,
            clientId,
            client=None)
    tokens = aws.authenticate_user()
except client.exceptions.NotAuthorizedException as e:
    print("error: {}".format(e))
    ...

对于您调用的 boto3 中的任何方法,您可以在 Cognito Identity Provider API reference 中找到完整的异常列表。 , 在您使用的方法的“错误”部分下。

例如,NotAuthorizedException 只是您在调用 aws.authenticate_user 时可能遇到的几个错误之一,因为 Warrant 正在调用 Initiate_Auth,它是 errors listed here .

希望有帮助。

关于Boto3 - botocore.errorfactory.NotAuthorizedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47560240/

相关文章:

python - 使用Boto3与RDS上的亚马逊极光交互

python - 带有 boto3 的 AWS S3 预签名 url - 签名不匹配

aws-lambda - 使用 AWS Glue 调用 Lambda 函数

amazon-web-services - Boto3 没有在 Windows 上加载 aws 凭据文件

aws-cloudformation - 扫描 cloudformation 堆栈层次结构的资源

python - AWS 路由表导出详细信息到 CSV

amazon-web-services - 直接查询时AWS describe_containers返回空

python - 使用 python 库 s3fs 写入 AWS S3 失败并出现 EntityTooLarge

pythonw.exe 无法将文件上传到 Amazon S3

amazon-web-services - 请求中包含的安全 token 已过期