2016-09-04 7 views
2

Ich befolgte die genauen Schritte in Laracast : What's New in Laravel 5.3: Laravel Passport implementiert api authentication mit oauth2.Laravel 5.3: Passport-Implementierung - {"Fehler": "invalid_client", "Nachricht": "Client-Authentifizierung fehlgeschlagen"}

Meine web.php Datei im Client/Consumer-Projekt wie folgt aussieht:

use Illuminate\Http\Request; 


Route::get('/', function() { 
$query = http_build_query([ 
    'client_id' => 2, 
    'redirect_uri' => 'http://offline.xyz.com/callback', 
    'response_type' => 'code', 
    'scope' => '', 
    ]); 

return redirect ('http://api.xyz.com/oauth/authorize?'.$query); 
}); 

Route::get('/callback', function (Request $request){ 
$http= new GuzzleHttp\Client; 

$response = $http->post('http://api.xyz.com/oauth/token',[ 
    'form_params' => [ 
      'grant_type' => 'authorization_code', 
      'client_id' => 2 , 
      'client_secret' => 'tUGYrNeWCGAQt220n88CGoXVu7TRDyZ20fxAlFcL' , 
      'redirect_uri' => 'http://offline.xyz.com/callback', 
      'code' => $request->code, 
     ], 
    ]); 

return json_decode((string) $response->getBody(), true); 
}); 

ich die Erlaubnis anfordern Seite bekommen, wo ich authorize brauche meine Kunden zu ermöglichen, die api zuzugreifen. Aber, sobald ich autorisiere klicken, ich werde auf die Seite umgeleitet, wo es die folgende Meldung angezeigt:

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

Wie dieses Problem zu beheben?

Ich habe laravel/passport nicht im Offline-Projekt installiert. Verpasse ich etwas? Ich habe gefolgt und implementiert, was genau in dem Video-Tutorial erwähnt wurde. Muss ich etwas anderes hinzufügen, das mir nicht bewusst ist? (Ich habe ein sehr grundlegendes Wissen über oauth2).

Wenn es hilft, versuche ich ein Offline-System zu implementieren, das regelmäßig Daten an ein Online-System sendet, wenn eine Internetverbindung besteht. Also dachte ich, ich kann eine api erstellen und senden Sie post Anfrage mit Informationen gespeichert werden.

+0

Sind Sie sicher, dass Ihre client_id 2 ist? Ich habe das Tutorial nicht angesehen, aber normalerweise sind die oauth client_ids nicht die Autoinkrementwerte in db. – engvrdr

+0

Ich habe auch die 'vue'-Komponenten implementiert und da kann ich die Liste der Kunden sehen, die ich mit ihren IDs habe, und damit bin ich mir sicher, dass ich einen Client mit der ID 2 habe. –

Antwort

0

Das Problem war die Redirect URL, die ich erwähnt habe, während die OAuth Clientverschiedene aus war zu schaffen, was ich brauchte. Nach dem Tutorial hatte ich http://api.xyz.com/callback erwähnt, welches http://offline.xyz.com/callback sein sollte.

Wenn Sie die vue Komponenten implementiert haben, verwenden Sie die Edit Option für die Oauth Client erstellt. Ändern Sie die Weiterleitungs-URL entsprechend.

Stellen Sie außerdem sicher, dass das id Feld und das redirect Feld in der Tabelle oauth-clients die gleichen Werte enthalten, wie in der Routenbeschreibung für /callback in Ihrer routes/web.php Datei erwähnt.

Dies sollte den Fehler beheben. Es kann jedoch einen weiteren Fehler verursachen - HttpFoundationFactory nicht gefunden.

In composer.json, aktualisieren Sie die Datei mit folgendem im require Abschnitt:

"symfony/psr-http-message-bridge": "0.2" 

und composer update läuft.

Sie sind jetzt gut zu gehen.

+1

Sie müssen angeben, welchen Grant Type Sie verwenden möchten g zu implementieren. Dieser Fix bezieht sich nur auf den Grant-Typ authorization_code und deutet eher auf ein Setup-Problem hin. –

0

Vielleicht installieren Sie Ihr Laravel-Projekt neu oder installieren den Pass neu? Überprüfen Sie, ob Ihre client_id und client_secret an allen Orten gleich sind: ".env“Datei‚oauth_clients‘Datenbanktabelle, und in Ihrem Teil des Codes:

'client_id' => ...., 
    'client-secret' => ...... 

Im Fall, wenn es eine andere ist dann kopieren und client_id und client_secret aus der Paste‚oauth_clients‘datatbase Tabelle, um Ihren Code für geeignete Parameter (client_id, client_secret)