jue*_*eno 17 authentication amazon-web-services oauth-2.0 google-oauth amazon-cognito
我目前正在使用与 Google 联合作为身份提供商的 Cognito 用户池来处理用户登录我的网络应用程序。目前,我只实现了使用 Google 登录。这目前正在通过 Cognito 的托管 UI 完成。
当用户使用 Google 登录时,我希望始终提示他们选择他们的帐户,即显示此提示。
但是,我发现当我仅使用一个 Google 帐户登录时,会跳过此屏幕。虽然,当我没有登录 Google 帐户/2 个或更多 Google 帐户时,会显示此屏幕。
我试图让这个屏幕总是出现的事情:
federatedSignIn({provider: 'Google'})功能。然而,我发现,这只是对Cognito的托管UI,只是重定向到相同的授权端点的包装,如所描述这里。prompt=select_account到Google 文档中详述的授权端点,但这没有任何效果。这并不奇怪,因为授权端点prompt的AWS 文档中没有详细说明该选项。如果有人对我如何始终显示此帐户选择屏幕有任何想法,将不胜感激。
Loc*_*Guy 17
事实证明,此时(2020 年 1 月)(编辑:请参阅下文以了解他们提出的仍然存在问题的解决方案)AWS Cognito 不支持prompt=select_account(或promptGoogle 提供的任何选项)。在他们的支持下来回走动,以下是他们当前行动计划的最终结果信息:
(重申问题) Auth.signOut() 仅从 Cognito 注销,而不是从联合提供商(在您的情况下为 Google)注销。因此,当您再次尝试登录时(在您的客户情况下,使用
Auth.federatedSignIn({ .provider: 'Google' }))它会自动绕过 Google 的帐户选择/登录并直接使用现有会话。[如果是错误的 Google 会话,这可能是一个问题]对此的一个次优解决方案是同时退出 Google。您可以通过向https://accounts.google.com/logout发出 GET 请求来完成此操作。这样,后续
federatedSignIn将需要通过 Google 登录屏幕。我已将此案例上报给西雅图的 Cognito 服务团队以获取功能请求:
能够
prompt="select_account"通过 URL 查询将选项传递给 Google。
编辑以添加 Cognito 响应:
如果您使用的是 Cognito 托管 UI,则可以通过调用以下端点来清理 Cognito 用户池会话:
https://<Your-User-Pool-Domain>.auth.<Your-User-Pool-Region>.amazoncognito.com/logout?client_id=<Your-User-Pool-App-Client>&logout_uri=<Your-User-Pool-SignOut-URL>
Run Code Online (Sandbox Code Playgroud)
当我 (AWS Congito) 尝试使用 Cognito Hosted UI 重现该问题时,我必须在退出后重新登录 Google。我无法以一种或另一种方式重现这个问题。
有关更多信息和各种选项,请参阅Cognito 文档以获取注销链接。
编辑以添加更多信息:不幸的是,此修复程序(使用注销链接)无法按预期工作。它确实让用户选择一个新的身份提供商(谷歌、Facebook 等),但如果用户使用他们选择的身份登录,那么它会继续使用该用户身份,而不是让用户在其中进行选择多个帐户或使用新帐户登录。