[FIXED] AWS Cognito – So erzwingen Sie die Kontoauswahl bei der Anmeldung bei Google

Ausgabe

Ich verwende derzeit Cognito-Benutzerpools, die mit Google als Identitätsanbieter verbunden sind, um die Benutzeranmeldung für meine Web-App zu handhaben. Im Moment habe ich nur die Anmeldung mit Google implementiert. Dies geschieht derzeit über die gehostete Benutzeroberfläche von Cognito.

Wenn sich Nutzer bei Google anmelden, möchte ich, dass sie immer aufgefordert werden, ihr Konto auszuwählen, dh diese Aufforderung angezeigt wird .

Ich habe jedoch festgestellt, dass dieser Bildschirm übersprungen wird, wenn ich nur mit einem Google-Konto angemeldet bin. Wenn ich jedoch bei keinem Google-Konto / 2 oder mehr Google-Konten angemeldet bin, wird dieser Bildschirm angezeigt.

Dinge, die ich versucht habe, damit dieser Bildschirm immer angezeigt wird:

  1. Verwenden der Funktion von AWS Amplify federatedSignIn({provider: 'Google'}). Ich habe jedoch festgestellt, dass dies nur ein Wrapper auf der gehosteten Benutzeroberfläche von Cognito ist und nur zu demselben Autorisierungsendpunkt weiterleitet, wie hier beschrieben .
  2. Das Hinzufügen prompt=select_accountzum Autorisierungsendpunkt, wie in der Dokumentation von Google beschrieben , hatte jedoch keine Auswirkungen. Dies war nicht überraschend, da die Option in der AWS-Dokumentation für den Autorisierungsendpunktprompt nicht detailliert beschrieben wird .

Wenn jemand eine Idee hat, wie ich diesen Kontoauswahlbildschirm immer anzeigen lassen kann, wäre ich sehr dankbar.

Lösung

prompt=select_accountEs stellt sich heraus, dass AWS Cognito zu diesem Zeitpunkt (Januar 2020) (Bearbeiten: siehe unten für ihre vorgeschlagene Lösung, die immer noch problematisch ist) die (oder eine der von promptGoogle bereitgestellten) Optionen nicht unterstützt . Ging mit ihrer Unterstützung hin und her, und hier ist die endgültige resultierende Nachricht mit ihrem aktuellen Aktionsplan:

(Wiederholung des Problems) Auth.signOut() meldet sich nur von Cognito ab, aber nicht vom föderierten Anbieter (in Ihrem Fall Google). Wenn Sie also versuchen, sich erneut anzumelden (im Fall Ihres Kunden Auth.federatedSignIn({ .provider: 'Google' }))wird die Kontoauswahl/Anmeldung von Google automatisch umgangen und direkt die vorhandene Sitzung verwendet. [was ein Problem sein könnte, wenn es sich um die falsche Google-Sitzung handelt]

Eine suboptimale Lösung hierfür besteht darin, sich auch bei Google abzumelden. Sie können dies erreichen, indem Sie eine GET-Anforderung an https://accounts.google.com/logout senden . Auf diese Weise muss ein nachfolgender federatedSignInden Google-Anmeldebildschirm durchlaufen.

Ich habe diesen Fall an das Cognito-Serviceteam in Seattle eskaliert, um eine Funktionsanfrage zu erhalten:

prompt="select_account"Möglichkeit, eine Option über die URL-Abfrage an Google weiterzugeben .

Bearbeiten, um Cognito-Antwort hinzuzufügen:

Wenn Sie die von Cognito gehostete Benutzeroberfläche verwenden, können Sie die Sitzung des Cognito-Benutzerpools bereinigen, indem Sie den Logout-Endpunkt aufrufen:

    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>

Als ich (AWS Congito) versuchte, das Problem mit der von Cognito gehosteten Benutzeroberfläche zu reproduzieren, musste ich mich erneut bei Google anmelden, nachdem ich mich abgemeldet hatte. Ich konnte dieses Problem auf die eine oder andere Weise nicht reproduzieren.

Weitere Informationen und verschiedene Optionen finden Sie in der Cognito-Dokumentation für den Abmeldelink .

Nach dem Versuch ihrer Antwort: Leider funktioniert dieser Fix (über den Abmeldelink) nicht wie erwartet. Es lässt den Benutzer einen neuen Identitätsanbieter auswählen (Google, Facebook usw.), aber wenn der Benutzer mit dem von ihm ausgewählten angemeldet ist, verwendet es diese Benutzeridentität, anstatt dem Benutzer die Möglichkeit zu geben, zwischen ihnen zu wählen mehrere Konten oder melden Sie sich mit einem neuen an.


Beantwortet von –
LocalPCGuy


Antwort geprüft von –
Willingham (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like