首页 > 解决方案 > 每当使用 OTP 代码时,从移动设备上的 AWS Cognito 托管 UI 登录获取 invalid_request invalid_grant 错误

问题描述

我有一个使用 AWS Amplify 框架构建的网络应用程序。我依靠 Cognito Hosted UI w/identity federation 进行注册和登录。在查看我的应用程序的注册时,我注意到它有 70 多个注册,但其中只有 12 个继续创建用户配置文件。我测试了通过每个身份提供商(亚马逊、谷歌、Facebook)以及通过使用电子邮件和密码的标准注册来创建帐户和登录。我从来没有任何问题。

我开始在移动设备上进行更多测试,最终我开始遇到错误。我将移动设备插入笔记本电脑,导航到chrome//:inspect并检查了网络选项卡和 JS 控制台。仅当我选择的身份提供商需要 OTP 代码时,我才注意到在输入代码invalid_requestinvalid_grant继续登录后出现错误,即使注册似乎有效(我说注册似乎有效,因为我收到了 AWS 凭证在初始响应中并amplify-signin-with-hostedUI在 localStorage 中设置为 true。此外,当我打开 AWS 控制台并转到 Cognito 时,我可以看到我已被添加为我的 User_Pool 中的用户)。

如果此时我刷新浏览器,似乎有一个新请求被发送到/token,但它返回的invalid_grant消息是 400 错误。

我不停地四处寻找,最终发现了一些有趣的东西。登录过程涉及三个选项卡,我认为这在某种程度上把事情搞砸了。在移动设备上,当我尝试使用 Cognito 托管 UI 注册或登录时,我首先会看到联合身份提供程序按钮和电子邮件/密码页面。

首先,我访问了我的网站(标签一)。然后我单击注册并弹出托管 UI 页面(选项卡二)。我选择一种登录方法(亚马逊、谷歌、Facebook 或电子邮件/密码)。如果选择的方法不需要 OTP,我很幸运。我被重定向到我的网络应用程序并且该应用程序运行良好。如果我选择的方法需要 OTP,则会打开一个新选项卡(选项卡 3),要求提供令牌。此时,我可以在 Chrome devtools 中看到此选项卡(选项卡 3)出现错误。

在此处输入图像描述

插入 OTP 代码并单击登录后,如预期的那样,我被重定向回我的网络应用程序,但此重定向发生在原始选项卡(选项卡一)中,但查询字符串添加到 URL (/?code=)。如果我单击查看选项卡按钮,我会看到托管 UI 选项卡(选项卡二)仍然打开,并且仍然打开 Cognito 托管 UI 按钮/用户名+密码页面。不确定这是否重要。

现在在我的 Web 应用程序的 Tab One 上,我没有立即在 Chrome 开发工具中看到任何错误。但我可以看到我的应用程序无法加载。如果我等待,它只会永远加载和加载。如果我刷新页面,那么此时我会在 Chrome DevTools 的网络选项卡中看到一个对 /token 的新请求,它会返回 400 错误invalid_grant响应。

有没有其他人遇到过这个问题或找到了解决方案?

提前致谢!

标签: amazon-web-servicesmobileoauth-2.0amazon-cognitoaws-amplify

解决方案


推荐阅读