在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/