确认设备上的 AWS Cognito Boto3 错误:给定的设备密钥无效



我一直在创建一个带有 MFA 启用的 Python、Django 和 Boto3 的 AWS Cognito 流。

我的身份验证流程如下:

initiate_auth:在 Django rest 端点上调用

response = client.initiate_auth(
ClientId=settings.AWS_COGNITO_CLIENT_ID,
AuthFlow='USER_PASSWORD_AUTH',
AuthParameters={
'USERNAME': email,
'SECRET_HASH': get_secret_hash(email),
'PASSWORD': password,
}
)
if "ChallengeName" in response:
data["mfa"] = True
data["session"] = response["Session"]

respond_to_auth_challenge:在单独的 Django rest 端点上调用

response = client.respond_to_auth_challenge(
ClientId=settings.AWS_COGNITO_CLIENT_ID,
ChallengeName='SMS_MFA',
Session=session,
ChallengeResponses={
'USERNAME': email,
'SMS_MFA_CODE': code,
'SECRET_HASH': get_secret_hash(email),
}
)

基于这篇文章,我想实现确认设备,以便在下次登录时跳过 MFA。因此,在响应身份验证质询之后,我有以下代码:

device_key = response['AuthenticationResult']['NewDeviceMetadata']['DeviceKey']
device_group_key = response['AuthenticationResult']['NewDeviceMetadata']['DeviceGroupKey']
device_password, device_secret_verifier_config = generate_hash_device(device_group_key, device_key)
device = client.confirm_device(
AccessToken=response["AuthenticationResult"]["AccessToken"],
DeviceKey=device_key,
DeviceSecretVerifierConfig=device_secret_verifier_config,
DeviceName=email
)

但我总是得到

未知错误 调用确认设备操作时出错(无效参数异常(:给定的设备密钥无效。

谁能帮助为什么会发生这种情况?

所以我找到了一个对我有用的东西。

在质询响应中,您需要传递响应中的用户名以获取initial_auth

在应存储在response["Username"]

然后在调用respond_to_auth_challenge时,您将使用此参数


response = client.respond_to_auth_challenge(
ClientId=settings.AWS_COGNITO_CLIENT_ID,
ChallengeName='SMS_MFA',
Session=session,
ChallengeResponses={
'USERNAME': username, // response["Username"] <--------
'SMS_MFA_CODE': code,
'SECRET_HASH': get_secret_hash(email),
}
)

我希望它在 AWS 上得到更好的记录,否则他们至少会有更好的错误消息。

这为我解决了问题。

相关内容

  • 没有找到相关文章

最新更新