GOOGLE ADS

Mittwoch, 20. April 2022

Laravel Passport Password Grant - Client-Authentifizierung fehlgeschlagen

Nachdem ich viel über den Laravel-Pass gehört hatte, dachte ich daran, ihn in mein neues Projekt zu implementieren, wo meine Anforderung darin besteht, eine API zu erstellen, die in einer mobilen App verwendet wird.

Meine mobile App ist also eine client, die weiterhin ihre Benutzer haben wird.

Ich habe die von Taylor erwähnten Schritte befolgt und auch hier darüber gelesen. Kurz gesagt habe ich diese Schritte befolgt:

  • Installiert laravel/passport.

  • Erstellt einen Website-Benutzer.

  • Generierte Passschlüsselphp artisan passport:install

  • Generiert client_idund client_secretverwendetphp artisan passport:client

  • Hinzugefügt redirectionund callbackRouten eingefügtweb.php

  • Den Benutzer autorisiert und das endgültige Zugriffstoken erhalten.

  • Dann habe ich versucht anzurufen api/user( mit Header Authorization, der Wert enthältBearer eyJ0eXAiOiJKV1...(token)

    Ich habe die Daten erhalten. Ziemlich einfach und ordentlich.

    Aber meine App-Benutzer haben diese Details nicht. Also dachte ich daran, Password Grant Tokens zu konfigurieren, die perfekt zu meinen Anforderungen passen.

    Jetzt beginnt das eigentliche Kopfzerbrechen. Ich habe versucht, dies für die letzten 3 Tage einzurichten und kontinuierlich zu bekommen

    {"error":"invalid_client","message":"Client authentication failed"}

    Ich habe fast alle Anleitungen ausprobiert, denen ich online gefolgt bin: Umleitungsprobleme, Mindestens eine Scope-Lösung hinzufügen, P100Y-Problem usw.

    Aber ich bekomme immer noch invalid clientFehler. Folgendes leite ich über POSTMAN weiter oauth/token:

    {
    "grant_type": "password,"
    "client_id": "3,"
    "client_secret": "8BUPCSyYEdsgtZFnD6bFG6eg7MKuuKJHLsdW0k6g,"
    "username": "test@gmail.com,"
    "password": "123456,"
    "scope": ""
    }

    Jede Hilfe wäre willkommen.


    Lösung des Problems

    Dies könnte Ihnen helfen, in die richtige Richtung zu weisen, da wir die Passwortgewährung selbst implementieren.

    1 - Auf Ihrem Schritt 4, anstatt dies auszuführen:

    php artisan passport:install

    Führen Sie Folgendes aus, um Ihren Passwort-Grant-Client zu erstellen:

    php artisan passport:client --password

    Der obige Befehl gibt eine Folgefrage aus, um den Namen Ihres Password Grant Client festzulegen. Stellen Sie sicher, dass Sie die ID und das Geheimnis dieses neuen Datensatzes in Ihrer Datenbank erhalten.

    2 - Ihr POSTMAN Post-Anforderungsobjekt sollte in ein Objekt ähnlich dem folgenden eingeschlossen werden:

    'form_params' => [
    'grant_type' => 'password',
    'client_id' => 'my_client-id',
    'client_secret' => 'my_client-secret',
    'username' => 'username or email', <-pass through variables or something
    'password' => 'my-user-password', <- pass through variables or something
    'scope' => '',
    ],

    Update 1 12.10.2016:

    Bei der weiteren Untersuchung dieses Problems stieß ich auf genau dieselbe Stelle, an der Sie sich befinden, und war gezwungen, in das Kaninchenloch des Passes einzutauchen.

    Derzeit hat das System, wie ich sehe, die Client-ID als „authorization_code" festgelegt, wenn es „password" sein muss. Ich recherchiere, wie ich dieses Problem lösen kann, das Sie haben, da ich auch darauf gestoßen bin. Ich werde Code posten, damit die Leute mitverfolgen können, wo ich gewesen bin und was ich getan habe, aber es ist gerade 2:40 Uhr morgens, also brauche ich etwas Schlaf.

    Update 2 12.10.2016

    Ich debugge das Problem jetzt seit 7 Stunden. Es gibt eine Methode innerhalb des Passes, die den Client validiert. Diese Methode nimmt die Eingaben, die Sie im Objekt hinzugefügt haben (oben erwähnt), und versucht, die Client-Entität über eine Client-Repository-Klasse abzurufen, basierend auf dem, was Sie eingegeben haben. Wenn ein Client gefunden wird, wird überprüft, ob Eine Instanz der Client-Entität existiert wirklich innerhalb der Client-Entitäts-Schnittstelle, die so aussieht, als würde sie die Anmeldeinformationen des Clients aus der Datenbank abrufen. Es gibt jedoch einen Codeblock, der NULL von dem zurückgibt, was ich in meinen Tests bekomme. ALLE Felder werden bisher richtig eingeführt, aber es scheint eine Verwechslung zwischen dem Repository und der Schnittstelle zu geben. Was dazu führt, dass der Fehler ausgelöst wird.

    Am Ende habe ich das Gefühl, dass ich der Lösung dieses Problems nahe komme. Ihre Geduld wird sehr geschätzt. =)

    Update 3 12.10.2016

    Nach langem Debuggen habe ich das anfängliche Problem gefunden. Es gab Felder, die nicht übereinstimmten. Kurz gesagt, es ist ein Setup-Problem.

    SO

    Die Lösung in diesem Fall lautet:

    ÜBERPRÜFEN SIE ALLE FELDER DOPPELT in der Datenbank, wobei ALLE Anmeldeinformationen übergeben werden. Bis hin zu Punkten, Bindestrichen, Leerzeichen, Passwörtern, Client-ID, Client-Geheimnis, GÜLTIGEN Umleitungs-URIs/URLs, Grant_types und Bereichen (falls Sie sie verwenden):

    Stellen Sie sicher, dass der Client in der Datenbank eine ENUM von 1 in der Spalte „password_client" hat, wenn nicht, müssen Sie eine mit dem oben erwähnten PHP-Artisan-Befehl erstellen, auf den ich hier verweise:

    php artisan passport:client --password

    Stellen Sie sicher, dass das Geheimnis, das Sie übergeben, mit dem übereinstimmt, was für diesen Client in Ihrer Datenbank Zeichen für Zeichen aufgeführt ist

    Stellen Sie sicher, dass die ID, die Sie übergeben, übereinstimmt und einen ganzzahligen Datentyp hat.

    Stellen Sie sicher, dass es einen Namen für den Client gibt

    Machen Sie sich keine Gedanken über die user_id-Spalte, wenn Sie Passworterteilungen verwenden

    vergewissern Sie sich, dass die Route korrekt ist

    Stellen Sie sicher, dass die E-Mail, die Sie eingeben (Benutzername), ein tatsächlicher Benutzer in Ihrer Benutzertabelle in Ihrer Datenbank ist (oder welche Tabelle Sie auch immer das Laravel 5.3-System so angepasst haben, dass sie als Ihre Benutzertabelle akzeptiert wird, ich werde einen Link hinzufügen, wie Sie Laravel 5.3 anpassen können System, um bei Bedarf eine andere Benutzertabelle als Standard zu akzeptieren).

    Stellen Sie sicher, dass der Grant_type richtig geschrieben ist

    Stellen Sie sicher, dass Sie das Response-Bearer-Token (d. h. access_token und refresh_token) akzeptieren können.

    Abgesehen davon sollten Sie die ersten Schritte, die ich im obigen Teil dieser Antwort skizziert habe, wieder auf den richtigen Weg bringen. Es gibt andere hier, die einige ähnliche Schritte erwähnt haben, die hilfreich sind, aber denselben Fehler behandeln, der sich auch auf ein separates Problem bezieht (was sicher auf ein Setup-Problem zurückzuführen ist, das mit ihrem spezifischen System-Setup zusammenhängt).

    Ich hoffe, das hilft trotzdem.

    Keine Kommentare:

    Kommentar veröffentlichen

    Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

    Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...