当前位置: 首页 > 知识库问答 >
问题:

AWS Cognito-如何在登录Google时强制选择帐户

苏涛
2023-03-14

我目前使用Cognito用户池,作为身份提供者与Google联合,来处理我的web应用程序的用户登录。目前,我只使用谷歌实现了登录。这目前是通过Cognito的托管用户界面来完成的。

当用户使用Google登录时,我希望始终提示他们选择他们的帐户,即显示此提示。

但是,我发现当我仅使用一个Google帐户登录时,会跳过此屏幕。虽然,当我没有登录Google帐户/2个或更多Google帐户时,会显示此屏幕。

我试图在这个屏幕上显示的东西总是:

  1. 使用AWS Amplify的<code>federatedSignIn({provider:‘Google})
  2. 将<code>prompt=select_account

如果有人有任何想法,我可以一直显示这个帐户选择屏幕,这将是非常感谢。

共有3个答案

吴凯泽
2023-03-14

根据Google文档,prompt=consence请求重新授权之前可能授予的所有作用域,因此应仅在必要时使用(可能在迁移用户数据时)。

否则,如果用户已经登录到他们的Google帐户,这将是预期的OAuth2.0行为。这与使用Github对StackOverflow进行OAuth2.0身份验证的行为相同。此线程可能会提供更多信息,即使它需要退出而不是登录:如何注销我使用OAuth2登录Google的应用程序?。

当然,您的应用程序不应该让用户从您的应用程序中注销他们的Google帐户。你可能会发现,当用户得知他们每次退出你的应用程序都需要一遍又一遍地重新登录Google时,你会遇到很多愤怒的用户。

我有一个类似的情况,用户注销他们的Google帐户时,不会从我的应用程序中提示帐户选择(绕过HostedUI)。将<code>aws amplify react

姚淳
2023-03-14

解决这个问题的一个方法是使用Cognoto注销并提示用户以另一个用户身份登录,而不是调用普通登录。这与登录类似,但会清除任何现有会话并显示登录屏幕。所以,与其打电话

https://xxxxxxxxxxx.auth.xxxxxxx.amazoncognito.com/login?client_id=xxxxxxxxxxxxxx&response_type=code&scope=email+openid+profile&redirect_uri=https://example.com/login

对于登录,请使用以下命令:

https://xxxxxxxxxxx.auth.xxxxxxx.amazoncognito.com/logout?client_id=xxxxxxxxxxxxxx&response_type=code&redirect_uri=https://example.com/login
丁理
2023-03-14

事实证明,目前(2020年1月)(编辑:参见下文,了解他们提出的仍然存在问题的解决方案),AWS Cognito不支持提示符=select_account(或谷歌提供的任何提示选项)。在他们的支持下来回奔走,以下是他们当前行动计划的最终信息:

(重述问题)Auth.signOut()只从Cognito注销,而不是从联邦提供者(在您的例子中是Google)注销。因此,当您尝试再次登录时(在您的客户案例中,使用< code>Auth.federatedSignIn({。provider: 'Google' }))它会自动绕过Google的账户选择/登录,直接使用现有的会话。[这可能是一个问题,如果这是错误的谷歌会话]

一个次优的解决方案是也从Google注销。您可以通过向https://accounts.google.com/logout.发出GET请求来实现这一点。这样,后续的联合登录将需要通过Google登录屏幕。

我已将此案例升级到西雅图的 Cognito 服务团队,以获取功能请求:

能够通过URL查询向Google传递< code > prompt = " select _ account " 选项。

编辑以添加认知到响应:

如果您使用的是 Cognito 托管 UI,则可以通过调用注销endpoint来清理 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>

当我(AWS Congito)试图用Cognoto托管的UI重现这个问题时,我不得不在注销后重新登录Google。我无法以这样或那样的方式重现这个问题。

有关更多信息和各种选项,请参见Cognito文档中的注销链接。

尝试他们的响应后:不幸的是,此修复程序(使用注销链接)无法按预期工作。它确实允许用户选择一个新的身份提供者(Google、Facebook等),但如果用户使用他们选择的身份登录,它会继续使用该用户身份,而不是让用户选择在多个帐户中进行选择或使用新帐户登录。

 类似资料:
  • 所以我已经在我的React应用中使用AWS Amplify (federatedSignIn)实现了Google认证。显然,我想让谷歌帐户选择器屏幕强制用户选择一个帐户登录。显然,它只有在有多个谷歌账户可供选择时才起作用,但如果只有一个账户,系统会自动使用它登录? 如何在只有一个帐户的情况下强制执行选择屏幕?

  • 我的应用程序中有以下工作流: 用户登录我的自定义应用程序 用户点击一个按钮链接他们的YouTube帐户 应用程序使用下面的代码列表发出服务器端请求 用户被重定向到google auth url 此时,发生了两件事之一: [我从来不想要这种行为] - 如果用户只登录了一个谷歌帐户(即mail,谷歌域名应用套件等),则永远不会要求用户选择要链接的帐户。它只是假设他们想要使用他们登录的那个,并继续其快乐

  • 背景资料 我在应用程序中使用Google Plus OAuth和Firebase。当用户点击登录按钮时,账户选择对话框出现,用户选择特定的账户并登录。 问题 假设用户在该设备中有两个帐户,A和b。最初,他选择帐户A登录,然后使用该应用程序,然后决定退出。现在他再次点击登录按钮,但是账户选择对话框没有出现,它自动使用先前选择的账户a登录。 我想要的 我希望用户每次都能看到帐户选择对话框,并让他们有机

  • 我正在使用谷歌Picker Api访问谷歌驱动器文件,工作正常。 但在我的浏览器中,如果我已经登录到多个Gmail帐户,它会自动显示一个帐户的驱动器文件。如果我已经登录了多个Gmail帐户,是否有办法显示帐户选择页面。 任何人都可以帮我。

  • 有没有办法,我可以强制谷歌帐户选择器显示,即使用户只用一个帐户登录。 我已尝试重定向到此 URL: 它似乎有效,但我不知道是否有任何其他条件可能会失败。

  • 我一直在尝试使用selenium登录我的谷歌帐户,但一旦我通过电子邮件并点击回车,它会重定向到以下消息 “此浏览器或应用可能不安全。了解更多信息请尝试使用其他浏览器。如果您已经在使用受支持的浏览器,您可以刷新屏幕,然后再次尝试登录。” 以下是我的python代码: 请注意,我是python和selenium的新手。我非常感谢你的帮助。提前谢谢 我已经尝试使用硒谷歌登录块中描述的方法,但它仍然给了我