Amazon Cognito: So verhindern Sie, dass beim Umleiten vom Browser zur Android-App der Fehler „redirect_mismatch“ angezeigt wird

Lesezeit: 6 Minuten

Benutzeravatar von JHowzer
JHowzer

Ich versuche, ein Android-Projekt zu erstellen, bei dem ich einen Benutzer autorisiere, indem ich ihn in einem Browser bei Amazon Cognito anmelden lasse, was dann sollte zurück zu meiner App umleiten. Leider erhalte ich beim Öffnen des Browsers immer wieder diesen Fehler, anstatt die richtige Anmeldeseite zu erreichen:

Geben Sie hier die Bildbeschreibung ein

In meiner AuthenticatorActivity.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_authenticator);

    Uri authzUrl = Uri.parse("https://<myDomain>.auth.us-west-2.amazoncognito.com/login?response_type=token&client_id=<myClientId>&redirect_uri=myapp://mainAct");
    Intent launchBrowser = new Intent(Intent.ACTION_VIEW, authzUrl);
    startActivity(launchBrowser);
}

Im AndroidManifest:

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:host="mainAct" android:scheme="myapp"></data>
    </intent-filter>
</activity>

Ich kann nicht herausfinden, was ich hier falsch mache. Übersehe ich einen Schritt?

  • Hast du das jemals gelöst?

    – Softino

    9. August 2018 um 18:39 Uhr

  • Ich habe dies zum Laufen gebracht, nachdem ich meine Rückruf-URL(s) festgelegt habe. [you can define more than one which is why you need to specify the redirect_uri] und Definieren meines Anmeldeendpunkts.
    Gehen Sie zum Amazon Cognito-Entwicklerhandbuch, wo die Spezifikationen für den Anmeldeendpunkt definiert werden: https://docs.aws.amazon.com/cognito/latest/developerguide/login-endpoint.html
    Am Ende der Seite geben sie ein Beispiel. Auf dieser Seite wird beschrieben, welche Parameter erforderlich und welche optional sind.

    – Valen

    29. August 2019 um 18:23 Uhr

Ok, ich hinterlasse hier einen Leckerbissen für den, der ihn als nächstes finden könnte. Ich bin auf genau dasselbe Problem gestoßen, aber als Neuling bei Cognito und IdP/SSO hatte ich keine Ahnung, wie ich das beheben könnte. Hier ist, was ich getan habe, um dies schließlich zu beheben. Wir haben uns in einen externen Dienst integriert und diesen Fehler erhalten. Unter Chrome Developer Tools -> Network habe ich angefangen, die besuchten URLs aufzuzeichnen, dann habe ich die SSO-Integration erneut versucht. In der Liste wurde eine URL angezeigt, die Cognito mit einer Umleitung zur URL besuchte. Diese URL muss dieselbe URL sein, die unter der Callback-URL für Cognito aufgeführt ist.

Hoffentlich spart das jemandem etwas Zeit in der Zukunft.

  • Kurz gesagt … die redirect_uri -Parameter in der Anfrage an den Cognito-Endpunkt muss mit der „Rückruf-URL“ übereinstimmen, die in den App-Client-Einstellungen des Cognito-Benutzerpools gefunden wird.

    – Lqueryvg

    3. April 2020 um 8:06 Uhr

  • Damit hatte ich auch zu kämpfen. Ich hatte das Root-Set richtig, aber vergessen, den Pfad anzugeben. So hatte ich https://192.168.0.101;3000/ aber hätte sein sollen https://192.168.0.101;3000/userProfile

    – HardBurn

    13. August 2020 um 8:31 Uhr


  • Ich bin nur hierher gekommen, um zu sagen, dass ich “lokaler Host: 3000” (nachgestellter Schrägstrich) in meiner oauth-Konfiguration und “lokaler Host: 3000” (kein nachgestellter Schrägstrich) in meiner Cognito-Benutzerpool-Callback-URL … als ich beide mit dem nachgestellten Schrägstrich versehen habe, ist dieser Fehler verschwunden.

    – Jason L

    9. November 2021 um 18:03 Uhr

  • Für mich war die auf aws definierte Umleitungs-URL nur “myapp://”. Nachdem ich es in “myapp://appname” geändert hatte, funktionierte es. Aber danke für den Entwicklertools-Trick. Es hat mir geholfen, das Problem zu finden, an dem ich seit 3 ​​Tagen feststeckte.

    – Sahil Garg

    7. Februar um 11:12 Uhr


Benutzeravatar von Alok Verma
Alok Verma

Überprüfen Sie Ihre Rückruf-URL und die Abmelde-URL. Das korrekte Format ist:

app_client_name:https://www.myapp.com/

Erkenntnis

  • also in deinem Fall die app_client_name wäre alok-besure?

    – Alex Kory

    28. November 2019 um 5:20 Uhr

  • Vielen Dank. Angabe einer vollständigen URL in Rückruf-URL und Abmelde-URL hat bei mir funktioniert.

    – John McGehee

    13. November 2020 um 19:41 Uhr

Erweiterung auf die Antwort von Dimitris https://stackoverflow.com/a/60456018/6883773

Wenn Sie für Ihren Load Balancer eine DNS-route53 angegeben haben. Sie können dasselbe in der Rückruf-URL angeben.

https://www.example.com/oauth2/idpresponse

Ref: https://aws.amazon.com/premiumsupport/knowledge-center/elb-configure-alb-authentication-idp/

Umleitungs-URI (1. Bild) muss dieselbe sein wie im Feld Rückruf-URL(s) (2. Bild).

1. Bild

Geben Sie hier die Bildbeschreibung ein

2. Bild (App-Integration -> App-Client-Einstellungen unter AWS)

Geben Sie hier die Bildbeschreibung ein

Ein weiterer dummer Fehler, den ich gemacht habe und für den ich Stunden brauchte, um es herauszufinden, war die Tatsache, dass der Wert von redirectSignIn in aws-exports.js war völlig falsch. Wenn Sie den Wert dieser Konfiguration mehrmals über die Amplify-CLI ändern, wird ein Komma angehängt, das den Wert als Liste behandelt und Ihnen so etwas gibt

 "redirectSignIn": "http://localhost:3000/,http://localhost:3000/,http://localhost:3000/,http://localhost:3000/",

Leider wird der Wert bei Verwendung von HostedUI als Zeichenfolge behandelt.

  • Wow, du hast mir so viel Zeit gespart. Vielen Dank!

    – Erik Gaasedelen

    13. Dezember 2020 um 7:12 Uhr

  • @Oscar, ich arbeite auch mit Amplify, um SAML-basiertes IDP zu integrieren. Wenn ich jedoch direkt auf die URL zugreife: https://.amazoncognito.com/login?response_type=token&client_id=&redirect_uri=localhost:3000/campaignsList, es funktioniert super. Allerdings muss ich es auch in das Frontend integrieren. Aber ich stehe vor Problemen. Meine aws-export.js hat oauth als:

    – Ascher Aleem

    4. August 2021 um 12:30 Uhr

  • “oauth”: { “domain”: ,”Bereich”:[“phone”,”email”,”openid”,”profile”,”aws.cognito.signin.user.admin”],”redirectSignIn”: “localhost:3000/campaignsList“, “redirectSignOut”: “localhost:3000/Anmeldung“, “responseType”: “token”, “client_id”: }, habe ich relaySignIn gleich den CallBackUrls in meinem Cognito-Client und forwardSignOut gleich den Abmelde-URLs gehalten. Auch auf der Anmeldeseite mache ich das : Auth.configure({ awsmobile }); um die Konfigurationen abzurufen und auf der Anmeldeschaltfläche auf Ja zu klicken:

    – Ascher Aleem

    4. August 2021 um 12:31 Uhr


  • warte auf Auth.federatedSignIn({customProvider: “IdP”}).

    – Ascher Aleem

    4. August 2021 um 12:33 Uhr

  • @AzherAleem Welches Problem haben Sie?

    – Oscar Nevarez

    4. August 2021 um 17:18 Uhr

Ich verwende Amplify mit Cognito und bin auf diesen Fehler gestoßen. Behoben durch folgendes. In aws-export.ts gibt es eine RedirectSingIn-URL, es muss genau dieselbe URL sein wie in cognito/app Integration/app client setting/callback url, wo die Anwendung ausgeführt wird.

Update: Ich habe dieses Problem erneut in AWS Cognito, Benutzerpool, App-Client, Client-Web festgestellt. Nach dem Aktualisieren der Callback-URL(s) fangen die Dinge an zu brechen, sogar die Callback-URL(s) ist gültig. Später habe ich herausgefunden, dass es einige Zeit dauern wird, bis die Änderung synchronisiert wird. Ich muss ungefähr 10 Minuten weggehen und es dann erneut versuchen.

  • Wow, du hast mir so viel Zeit gespart. Vielen Dank!

    – Erik Gaasedelen

    13. Dezember 2020 um 7:12 Uhr

  • @Oscar, ich arbeite auch mit Amplify, um SAML-basiertes IDP zu integrieren. Wenn ich jedoch direkt auf die URL zugreife: https://.amazoncognito.com/login?response_type=token&client_id=&redirect_uri=localhost:3000/campaignsList, es funktioniert super. Allerdings muss ich es auch in das Frontend integrieren. Aber ich stehe vor Problemen. Meine aws-export.js hat oauth als:

    – Ascher Aleem

    4. August 2021 um 12:30 Uhr

  • “oauth”: { “domain”: ,”Bereich”:[“phone”,”email”,”openid”,”profile”,”aws.cognito.signin.user.admin”],”redirectSignIn”: “localhost:3000/campaignsList“, “redirectSignOut”: “localhost:3000/Anmeldung“, “responseType”: “token”, “client_id”: }, habe ich relaySignIn gleich den CallBackUrls in meinem Cognito-Client und forwardSignOut gleich den Abmelde-URLs gehalten. Auch auf der Anmeldeseite mache ich das : Auth.configure({ awsmobile }); um die Konfigurationen abzurufen und auf der Anmeldeschaltfläche auf Ja zu klicken:

    – Ascher Aleem

    4. August 2021 um 12:31 Uhr


  • warte auf Auth.federatedSignIn({customProvider: “IdP”}).

    – Ascher Aleem

    4. August 2021 um 12:33 Uhr

  • @AzherAleem Welches Problem haben Sie?

    – Oscar Nevarez

    4. August 2021 um 17:18 Uhr

Ich habe das gelöst, indem ich daran gedacht habe, einzuschließen http:// in der callbackUrl auf dem Frontend.

const redirect_url=`${window.location.origin}`;

Es wird wahrscheinlich kein häufiger Grund sein, aber meiner ist kaputt gegangen.

1431620cookie-checkAmazon Cognito: So verhindern Sie, dass beim Umleiten vom Browser zur Android-App der Fehler „redirect_mismatch“ angezeigt wird

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy