2016-08-26 1 views
2

Laravel 5.3 Passport-Komponente sieht ziemlich cool aus, aber ich habe etwas Verwirrung darüber.Laravel 5.3 Passport Routen verwendet Web-Middleware

Auf Dokumentation Passport ist unter API-Authentifizierung, und wenn config/auth.php festgelegt wird, wird es Fahrer als "Pass" der Wachen 'api' ändern.

Laravel 5.3 haben web.php und api.php zu unterscheiden Routen Gruppe Web-Middleware oder API Middleware zu verwenden.

Nach der Installation von Passport müssen Sie Passport: routes() zu AuthServiceProvider hinzufügen. Wenn ich route: list starte, werden die neuen Routen angezeigt, die alle Web- und Auth-Middleware verwenden.

Meine Frage ist, warum diese Passportrouten Web-Middleware verwenden? Nach meinem Verständnis sollte Passport für statusfreie API-Authentifizierung arbeiten, aber Web-Middleware ist nicht.

Antwort

0

Ich habe das offenbar gelöst.

Das erste, was ich tat, war hinzufügen und eine CORS-Middleware konfigurieren von hier https://github.com/barryvdh/laravel-cors

Dann habe ich die Passport-Routen in einer Route Gruppe bearbeite app/Anbieter/AuthServiceProvider.php

/** 
* Register any authentication/authorization services. 
* 
* @return void 
*/ 
public function boot() 
{ 
    $this->registerPolicies(); 

    Route::group(['prefix' => 'api', 'middleware' => 'cors'], function() { 

     Passport::routes(); 

    }); 
} 

Theoretisch gewickelt Wenn Sie den oauth-Dienst außerhalb Ihrer API verwenden möchten, könnten Sie zwei Instanzen der Passport-Routen haben, eine mit dem Präfix/api und der cors-Middleware, dann eine ohne. So verlieren Sie den Herkunftsschutz nicht, wenn Verwenden Sie oauth im Browser.

+0

Leider hat mir das überhaupt nicht geholfen. Es wurde lediglich die Middleware zu der bereits vorhandenen Liste der Middleware hinzugefügt. Anstatt also die Middleware von "web, auth" zu "cors" zu ändern, habe ich "cors, web, auth" bekommen. Es scheint ein bisschen weit draußen, um Auth auf die Sache zu tun, die Sie authentifizieren soll :-) –

0

Ich war auch mit diesem Problem konfrontiert, bis ich erkannte, dass mein Verständnis des Arbeitsprinzips des Passes falsch ist.

Passport dient dazu, einer Clientanwendung die Daten eines Benutzers mit der Zustimmung des Benutzers zu erteilen (auf diese Weise funktioniert OAuth2). Wenn also eine Client-Anwendung versucht, das Zugriffstoken zu erhalten, das schließlich Zugriff auf die Daten dieses Benutzers gewährt, muss die Zustimmung des Benutzers eingeholt werden. Die Web-Middleware dient als eine Ebene, um die Zustimmung des Benutzers zu übernehmen. Um die Zustimmung zu unterschreiben, muss sich der Benutzer zuerst anmelden oder es gibt keinen Beweis, dass es sich um einen tatsächlichen Benutzer handelt.

Um besser zu verstehen, überlegen Sie sich ein Szenario, in dem Ihre App versucht, die Funktion "Mit Google anmelden" zu implementieren. Sie legen eine Schaltfläche fest, die auf Ihrer Anmeldeseite zu Google weiterleitet, nach der Weiterleitung die Benutzeranmeldung in ihrem Google-Konto, unterschreiben Sie eine Zustimmung und wird mit einem Autorisierungscode zurück zu Ihrer App weitergeleitet. Dies ist genau so, hier ist Google die App, die Sie erstellen und die andere App ist die Client-App.

Noch der beste Weg, dies zu verstehen, wenn eine praktische Umsetzung. Erstellen Sie einfach eine neue App in Laravel und fügen Sie diesen Code in die Datei routes/web.php ein.

Route::get('/redirect', function() { 
    $query = http_build_query([ 
     'client_id' => 'YOUR APP'S CLIENT ID', 
     'redirect_uri' => 'THE CALLBACK YOU GAVE DURING CREATING THE CLIENT', 
     'response_type' => 'code', 
     'scope' => '', 
    ]); 

    return redirect('http://your-app.com/oauth/authorize?'.$query); 
}); 

Dann besuchen Sie die neue App mit der /redirect Route. Stellen Sie sicher, dass Ihre Haupt-App auch läuft.

Verwandte Themen