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

     2023-02-24     205

关键词:

【中文标题】确认设备上的 AWS Cognito Boto3 错误:给出的设备密钥无效【英文标题】:AWS Cognito Boto3 Error on Confirm Device: Invalid device key given 【发布时间】:2020-03-22 12:42:14 【问题描述】:

我一直在使用启用 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 休息端点上调用

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),
            
        )

基于此post,我想实现确认设备,以便在下次登录时跳过 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
        )

但我总是得到

未知错误调用 ConfirmDevice 操作时发生错误 (InvalidParameterException):给定的设备密钥无效。

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

【问题讨论】:

你解决过这个问题吗? 【参考方案1】:

所以我找到了适合我的东西。

在您的挑战响应中,您需要从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 上得到更好的记录,或者他们至少会有更好的错误消息。

这解决了我的问题。

【讨论】:

带有 CloudFormation 的 AWS Cognito - 架构属性上的 InvalidParameterException

】带有CloudFormation的AWSCognito-架构属性上的InvalidParameterException【英文标题】:AWSCognitowithCloudFormation-InvalidParameterExceptiononschemasttributes【发布时间】:2021-01-3122:21:23【问题描述】:我正在尝试使用CloudFormation创建Cognito用户池,但在... 查看详情

我们将如何发送不同的电子邮件模板以重置密码并确认在 AWS cognito 中注册

...们将如何发送不同的电子邮件模板以重置密码并确认在AWScognito中注册【英文标题】:HowwewillsendthedifferentemailtemplateforresetpasswordandconfirmsignupinAWScognito【发布时间】:2021-12-0511:24:48【问题描述】:我想使用AWSCognito的两个api(signup,forg... 查看详情

从 aws cognito java 上的一个会话注销

】从awscognitojava上的一个会话注销【英文标题】:Logoutfromonesessiononawscognitojava【发布时间】:2021-10-1822:46:53【问题描述】:与使用从所有活动会话中注销的globalSignout相比,我如何使用awssdk仅从一个会话中注销用户?我环顾了其他... 查看详情

AWS Cognito 登录 iOS (swift)

】AWSCognito登录iOS(swift)【英文标题】:AWSCognitoSignIniniOS(swift)【发布时间】:2018-02-1310:31:23【问题描述】:我正在使用AWSCognito。场景非常简单。提示用户输入用户名、密码、电子邮件地址和电话号码。要求是当用户按下注册按钮... 查看详情

CloudFormation 删除更新堆栈操作上的 AWS Cognito Lambda 触发器

】CloudFormation删除更新堆栈操作上的AWSCognitoLambda触发器【英文标题】:CloudFormationremovingAWSCognitoLambdaTriggersonupdatestackoperations【发布时间】:2021-08-0104:48:28【问题描述】:我注意到,每当部署新的CloudFormation堆栈更改时,我的用户... 查看详情

使用 aws amplify cognito 的自定义身份验证流程

】使用awsamplifycognito的自定义身份验证流程【英文标题】:CustomAuthenticationflowwithawsamplifycognito【发布时间】:2021-03-2305:25:53【问题描述】:我想在awsamplifycognito服务中创建自定义注册身份验证流程我有什么1.输入用户名2.输入密码3... 查看详情

如何为 CORS 预检请求绕过 AWS API Gateway 代理资源上的 Cognito 授权方?

】如何为CORS预检请求绕过AWSAPIGateway代理资源上的Cognito授权方?【英文标题】:HowtobypassCognitoauthorizeronAWSAPIGatewayproxyresourceforCORSpreflightrequests?【发布时间】:2022-01-1002:20:57【问题描述】:我有一个非常简单的APIGateway资源配置:AN... 查看详情

AWS cognito 的用途和优势

】AWScognito的用途和优势【英文标题】:usesandbenefitsofAWScognito【发布时间】:2019-01-0806:48:00【问题描述】:我是AWScognito的新手。我阅读了awscognito文档并在互联网上搜索。在某些地方,我发现AWScognito用于用户登录和注册,而在某... 查看详情

AWS Cognito 可以在 EB 上的 Node/Express/React 应用程序中使用吗?

】AWSCognito可以在EB上的Node/Express/React应用程序中使用吗?【英文标题】:CanAWSCognitobeusedinaNode/Express/ReactapponEB?【发布时间】:2020-06-1711:55:58【问题描述】:我有一个Node/Express服务器,它在单个ElasticBeanstalk环境中为React应用程序提... 查看详情

AWS Cognito:处理令牌过期时间

】AWSCognito:处理令牌过期时间【英文标题】:AWSCognito:dealingwithtokenexpirationtime【发布时间】:2016-05-1916:01:32【问题描述】:我正在尝试Cognito,当我认为它开始没问题时,我遇到了(Google)令牌在1小时后过期的问题。当我开始使... 查看详情

使用 AWS Cognito 登录用户/验证用户

】使用AWSCognito登录用户/验证用户【英文标题】:SignInUser/AuthenticateUserwithAWSCognito【发布时间】:2018-03-2612:24:35【问题描述】:我正在尝试在asp.netCore2上登录用户服务器端我已经注册了一个用户并通过验证链接进行了确认,但现... 查看详情

忘记了来自 aws cognito 的密码链接

】忘记了来自awscognito的密码链接【英文标题】:Forgotpasswordlinkfromawscognito【发布时间】:2018-04-1204:59:16【问题描述】:我开始为我的虚拟ios应用程序探索AWScognito,尽管我在新用户注册期间收到了电子邮件中的确认链接,单击它... 查看详情

在 AWS Cognito 用户池中删除用户时触发 Lambda 函数

】在AWSCognito用户池中删除用户时触发Lambda函数【英文标题】:TriggeringaLambdafunctionupondeletingauseronAWSCognitoUserPool【发布时间】:2018-11-2508:15:47【问题描述】:AWSCognito用户池有一些预定义的事件来处理用户注册、确认等。完整列表... 查看详情

我可以通过 API 网关通过 Lambda 调用 AWS Cognito 吗?

】我可以通过API网关通过Lambda调用AWSCognito吗?【英文标题】:CanImakeacalltoAWSCognitoviaaLambdathroughtheAPIgateway?【发布时间】:2020-10-0305:11:42【问题描述】:我当前的堆栈是这样的:用户通过AWSCognito创建账户触发后确认lambda,然后将... 查看详情

如何在 AWS Lambda 中获取 Cognito 身份 ID

】如何在AWSLambda中获取Cognito身份ID【英文标题】:HowtogettheCognitoIdentityidinAWSLambda【发布时间】:2015-07-0720:00:53【问题描述】:如何获取调用AWSLambda函数的用户(通过AWSCognito登录)的身份ID?我是否必须使用Lambda函数上的SDK来获取... 查看详情

创建账户状态为“CONFIRMED”且没有电子邮件地址的 AWS Cognito 用户

】创建账户状态为“CONFIRMED”且没有电子邮件地址的AWSCognito用户【英文标题】:CreateAWSCognitouserwithaccountstatus"CONFIRMED"andwithoutemailaddress【发布时间】:2020-01-1020:48:45【问题描述】:如何创建一个使用c#确认帐户状态的Cognito... 查看详情

如何:Zeppelin + boto3 + AWS 凭证

】如何:Zeppelin+boto3+AWS凭证【英文标题】:Howto:Zeppelin+boto3+AWSCredentials【发布时间】:2019-09-1223:40:43【问题描述】:我有一个带有Zeppelin的VM,它是一个共享环境。我想添加boto3,这样我就可以针对AWS做一些python。由于zeppelin作为... 查看详情

使用 boto3 在 aws 中其 CPU 扩展策略低于特定阈值的所有自动扩展组的列表

...3【问题描述】:我有一堆ASG想要使用boto3来获取所有在CPU上的扩展策略小于某个阈值的ASG名称(即所有设置了扩展策略且值 查看详情