In diesem Artikel erfahren Sie, wie Sie mit der Laravel Passport-Bibliothek einen vollwertigen OAuth2-Server in Laravel einrichten können. Wir werden die erforderlichen Serverkonfigurationen zusammen mit einem realen Beispiel durchgehen, um zu zeigen, wie Sie OAuth2-APIs verwenden können.
Ich gehe davon aus, dass Sie mit den grundlegenden OAuth2-Konzepten und dem Ablauf vertraut sind, während wir sie im Kontext von Laravel diskutieren. Die Laravel Passport-Bibliothek macht es sehr einfach, einen OAuth2-Server schnell in Ihrer Anwendung einzurichten. Daher können andere Anwendungen von Drittanbietern APIs verbrauchen, die von Ihrer Anwendung bereitgestellt werden.
In der ersten Hälfte des Artikels werden wir die erforderlichen Bibliotheken installieren und konfigurieren. In der zweiten Hälfte wird beschrieben, wie Sie Demo-Ressourcen in Ihrer Anwendung einrichten und von Drittanbieteranwendungen verwenden.
In diesem Abschnitt werden die Abhängigkeiten installiert, die erforderlich sind, damit die Passport-Bibliothek mit Laravel zusammenarbeitet. Nach der Installation müssen wir einige Konfigurationen durchführen, damit Laravel die Passport-Bibliothek erkennen kann.
Fahren Sie fort und installieren Sie die Passport-Bibliothek mit Composer.
$ composer benötigen einen Laravel / Reisepass
Das ist so ziemlich alles, was die Installation der Passport-Bibliothek angeht. Jetzt stellen wir sicher, dass Laravel davon weiß.
Wenn Sie mit Laravel arbeiten, kennen Sie wahrscheinlich das Konzept eines Service Providers, mit dem Sie Services in Ihrer Anwendung konfigurieren können. Wenn Sie also einen neuen Dienst in Ihrer Laravel-Anwendung aktivieren möchten, müssen Sie lediglich einen zugehörigen Diensteanbieter-Eintrag in der config / app.php
.
Wenn Sie Laravel-Dienstanbieter noch nicht kennen, kann ich Ihnen dringend empfehlen, sich selbst einen Gefallen zu tun und diesen einleitenden Artikel zu lesen, der die Grundlagen der Diensteanbieter in Laravel erläutert.
In unserem Fall müssen wir nur das hinzufügen PassportServiceProvider
der Liste der Diensteanbieter in config / app.php
wie im folgenden Ausschnitt gezeigt.
… 'Provider' => [/ * * Laravel Framework Service Provider… * / Illuminate \ Auth \ AuthServiceProvider :: Klasse, Beleuchtung \ Broadcasting \ BroadcastServiceProvider :: Klasse, Illuminate \ Bus \ BusServiceProvider :: Klasse, Illuminate \ Cache \ CacheServiceProvider: : Klasse, Illuminate \ Foundation \ Providers \ ConsoleSupportServiceProvider :: Klasse, Illuminate \ Cookie \ CookieServiceProvider :: Klasse, Illuminate \ Database \ DatabaseServiceProvider :: Klasse, Illuminate \ Encryption \ EncryptionServiceProvider :: Klasse, Illuminate \ Filesystem \ FilesystemServiceProvider :: Klasse, Illuminate \ Foundation \ Providers \ FoundationServiceProvider :: Klasse, Illuminate \ Hashing \ HashServiceProvider :: Klasse, Illuminate \ Mail \ MailServiceProvider :: Klasse, Illuminate \ Notifications \ NotificationServiceProvider :: Klasse, Illuminate \ Pagination \ PaginationServiceProvider :: Klasse, Illuminate \ Pipeline \ PipelineServiceProvider :: Klasse, Illuminate \ Queue \ QueueServiceProvider :: Klasse, Illuminate \ Redis \ RedisServiceProvider :: Klasse, Illuminate \ Auth \ Passwords \ PasswordResetServ iceProvider :: class, Illuminate \ Session \ SessionServiceProvider :: class, Illuminate \ Übersetzung \ TranslationServiceProvider :: class, Illuminate \ Validation \ ValidationServiceProvider :: class, Illuminate \ View \ ViewServiceProvider :: class, / * * Paketdienstanbieter… * / Laravel \ Tinker \ TinkerServiceProvider :: class, / * * Anwendungsdienstanbieter… * / App \ Providers \ AppServiceProvider :: class, App \ Providers \ AuthServiceProvider :: class, App \ Providers \ BroadcastServiceProvider :: class, App \ Providers \ EventServiceProvider :: class, App \ Providers \ RouteServiceProvider :: class, Laravel \ Passport \ PassportServiceProvider :: class,],…
Als nächstes müssen wir das ausführen Wandern
handwerklicher Befehl, der die erforderlichen Tabellen in einer Datenbank für die Passport-Bibliothek erstellt.
$ php Handwerker migrieren
Um genau zu sein, erstellt es nach den Tabellen in der Datenbank.
oauth_access_tokens oauth_auth_codes oauth_clients oauth_personal_access_clients oauth_refresh_tokens
Als Nächstes müssen Sie ein Paar öffentlicher und privater Schlüssel generieren, die von der Passport-Bibliothek für die Verschlüsselung verwendet werden. Wie erwartet bietet die Passport-Bibliothek einen handwerklichen Befehl, um ihn leicht zu erstellen.
$ php handwerklicher Reisepass: installieren
Das hätte Schlüssel an erstellt storage / oauth-public.key
und storage / oauth-private.key
. Es erstellt auch einige Demo-Client-Anmeldeinformationen, auf die wir später zurückkommen.
Voran gehen, lass uns oauthify die vorhandene Benutzermodellklasse, die Laravel für die Authentifizierung verwendet. Dazu müssen wir das hinzufügen HasApiTokens
Merkmal der Nutzer
Modellklasse. Lassen Sie uns das tun, wie im folgenden Ausschnitt gezeigt.
Das
HasApiTokens
Trait enthält Hilfsmethoden, mit denen Token in der Anforderung überprüft und der Umfang der Ressourcen geprüft wird, die im Kontext des aktuell authentifizierten Benutzers angefordert werden.Außerdem müssen wir die von der Passport-Bibliothek bereitgestellten Routen in unserer Laravel-Anwendung registrieren. Diese Routen werden für Standard-OAuth2-Vorgänge wie Autorisierung, Anfordern von Zugriffstoken und dergleichen verwendet.
In der Boot-Methode des
app / Providers / AuthServiceProvider.php
Datei, lassen Sie uns die Routen der Passport-Bibliothek registrieren.… / ** * Registrieren Sie alle Authentifizierungs- / Autorisierungsdienste. * * @return void * / public function boot () $ this-> registerPolicies (); Pass :: routen (); …Nicht zuletzt müssen wir das ändern
api
Treiber vom Token zum Pass imconfig / auth.php
Datei, da wir die Passport-Bibliothek für die API-Authentifizierung verwenden werden.'guards' => ['web' => ['driver' => 'session', 'provider' => 'users',], 'api' => ['driver' => 'passport', 'provider' => 'Benutzer',],],Bisher haben wir alles getan, was die Konfiguration des OAuth2-Servers betrifft.
Richten Sie die Demo-Ressourcen ein
Im vorherigen Abschnitt haben wir alle harte Arbeit beim Einrichten des OAuth2-Authentifizierungsservers in unserer Anwendung ausgeführt. In diesem Abschnitt richten wir eine Demo-Ressource ein, die über den API-Aufruf angefordert werden kann.
Wir werden versuchen, die Dinge einfach zu halten. Unsere Demo-Ressource gibt die Benutzerinformationen zurück, vorausgesetzt, es gibt eine gültige
uid
Parameter vorhanden in derERHALTEN
anfordern.Lassen Sie uns eine Controller-Datei erstellen
app / Http / Controller / UserController.php
mit folgenden Inhalten.get ("uid", 0); $ user = User :: find ($ user_id); $ Benutzer zurückgeben;Wie üblich müssen Sie auch eine zugehörige Route hinzufügen, die Sie im hinzufügen möchten
routen / web.php
Datei. Worüber wir reden, ist die API-Route, und daher bedarf es einer besonderen Behandlung.Die API-Routen sind in definiert
routen / api.php
Datei. Fügen wir also unsere benutzerdefinierte API-Route hinzu, wie im folgenden Snippet gezeigt.get ('/ user', Funktion (Request $ request) return $ request-> user ();); // Benutzerdefinierte API-Route Route :: Middleware ('auth: api') -> get ('/ user / get', 'UserController @ get');Obwohl wir es als definiert haben
/ user / erhalten
, Die effektive API-Route lautet/ api / user / get
, Und das sollten Sie verwenden, wenn Sie über diese Route eine Ressource anfordern. Dasapi
Das Präfix wird automatisch von Laravel behandelt, und Sie müssen sich nicht darum kümmern!Im nächsten und letzten Abschnitt erfahren Sie, wie Sie Client-Anmeldeinformationen erstellen und die OAuth2-API verwenden können.
So verwenden Sie OAuth2-APIs
Nun, da wir den OAuth2-Server in unserer Anwendung eingerichtet haben, kann jeder Dritte mit OAuth eine Verbindung zu unserem Server herstellen und die in unserer Anwendung verfügbaren APIs verwenden.
Zunächst müssen sich Anwendungen von Drittanbietern bei unserer Anwendung registrieren, um APIs nutzen zu können. Mit anderen Worten, sie werden als Clientanwendungen betrachtet und erhalten bei der Registrierung eine Client-ID und ein Client-Secret.
Die Passport-Bibliothek bietet einen handwerklichen Befehl zum Erstellen von Kundenkonten ohne viel Aufwand. Erstellen Sie jetzt einen Demo-Client-Account.
$ php handwerklicher Pass: Client Welcher Benutzer-ID sollte der Client zugewiesen werden ?:> 1 Wie sollen wir den Client nennen ?:> Demo OAuth2 Client Account Wohin sollten wir die Anforderung nach der Autorisierung umleiten? [http: // localhost / auth / callback]:> http: //localhost/oauth2_client/callback.php Neuer Client erfolgreich erstellt. Client-ID: 1 Client-Geheimnis: zMm0tQ9Cp7LbjK3QTgPy1pssoT1X0u7sg0YWUW01Wenn Sie den Handwerker führen
Reisepass: Kunde
Wenn Sie den Befehl ausführen, werden einige Fragen gestellt, bevor Sie das Kundenkonto erstellen. Davon gibt es eine wichtige, die Sie fragtRückruf-URL
.Das
Rückruf-URL
ist derjenige, bei dem Benutzer nach der Autorisierung zum Ende des Drittanbieters weitergeleitet werden. Und dort wird der Autorisierungscode gesendet, der im Austausch für das Zugriffstoken verwendet werden soll. Wir werden diese Datei in Kürze erstellen.Jetzt können wir die OAuth2-APIs in der Laravel-Anwendung testen.
Zu Demonstrationszwecken werde ich das erstellen
oauth2_client
Verzeichnis unter dem Dokumentstamm an erster Stelle. Idealerweise befinden sich diese Dateien bei Drittanbietern, die APIs in unserer Laravel-Anwendung verwenden möchten.Lass uns die erstellen
oauth2_client / auth_redirection.php
Datei mit folgendem Inhalt.'1', 'redirect_uri' => 'http: //localhost/oauth2_client/callback.php', 'response_type' => 'code', 'scope' => ",))); header ('Location: http: / /your-laravel-site-url/oauth/authorize?'.$query);Stellen Sie sicher, dass Sie das ändern
Kunden ID
undredirect_uri
Parameter, die Ihre eigenen Einstellungen widerspiegeln, die Sie beim Erstellen des Demo-Client-Kontos verwendet haben.Als nächstes erstellen wir die
oauth2_client / callback.php
Datei mit folgendem Inhalt.'Authorization_code', 'client_id' => '1', 'client_secret' => 'zMm0tQ9Cp7LbjK3gT3PT1PssoTX0u7sg0YWUW01', 'redirect_uri' => 'http: //localhost/oauth2_client/cachl2/clach/ Code ']); curl_setopt ($ ch, CURLOPT_URL, $ url); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); $ params_string = "; if (is_array ($ params) && count ($ params)) foreach ($ params als $ key => $ value) $ params_string. = $ key. '='. $ value. '&' ; rtrim ($ params_string, '&'); curl_setopt ($ ch, CURLOPT_POST, Anzahl ($ params)); curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ params_string); $ result = curl_exec ($ ch); $ ch); $ response = json_decode ($ result); // prüfe, ob die Antwort access_token enthält if (isset ($ response-> access_token) && $ response-> access_token) // Sie möchten das access_token in der Sitzung speichern allerdings… $ access_token = $ response-> access_token; // Verwenden Sie das obige Token, um weitere API-Aufrufe in dieser Sitzung durchzuführen, oder bis das Zugriffstoken abgelaufen ist. $ ch = curl_init (); $ url = 'http: // Ihre-Laravel-Site -url / api / user / get '; $ header = array (' Authorization: Bearer '. $ access_token); $ query = http_build_query (array (' uid '=>' 1 ')); curl_setopt ($ ch, CURLOPT_URL, $ url. '?'. $ query); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ ch, CURLOPT_HTTPHEADER, $ header); $ result = curl_e xec ($ ch); curl_close ($ ch); $ response = json_decode ($ result); var_dump ($ result); else // aus irgendeinem Grund war das access_token nicht verfügbar // das Debugging geht hier hinVergewissern Sie sich erneut, dass Sie die URLs und die Anmeldeinformationen des Clients gemäß Ihren Einstellungen in der obigen Datei anpassen.
Wie es zusammen funktioniert
In diesem Abschnitt testen wir es vollständig aus der Perspektive eines Endbenutzers. Als Endbenutzer stehen Ihnen zwei Anwendungen zur Verfügung:
- Die erste ist die Laravel-Anwendung, mit der Sie bereits ein Konto haben. Sie enthält Ihre Informationen, die Sie mit anderen Anwendungen von Drittanbietern teilen können.
- Die zweite ist die Demo-Clientanwendung von Drittanbietern,
auth_redirection.php
undcallback.php
, Dies möchte Ihre Informationen mithilfe der OAuth-API aus der Laravel-Anwendung abrufen.Der Fluss beginnt bei der Drittanbieter-Clientanwendung. Öffnen Sie die URL http: //localhost/oauth2_client/auth_redirection.php in Ihrem Browser. Diese sollte Sie zur Laravel-Anwendung umleiten. Wenn Sie noch nicht bei der Laravel-Anwendung angemeldet sind, werden Sie von der Anwendung zunächst dazu aufgefordert.
Sobald der Benutzer angemeldet ist, zeigt die Anwendung die Autorisierungsseite an.
Wenn der Benutzer diese Anforderung autorisiert, wird der Benutzer zusammen mit der Client-Anwendung unter http: //localhost/oauth2_client/callback.php an die Drittanbieter-Clientanwendung zurückgeleitet
Code
als dieERHALTEN
Parameter, der den Berechtigungscode enthält.Sobald die Drittanbieteranwendung den Autorisierungscode erhalten hat, könnte sie diesen Code mit der Laravel-Anwendung austauschen, um das Zugriffstoken zu erhalten. Und genau das hat es im folgenden Ausschnitt des getan
oauth2_client / callback.php
Datei.$ ch = curl_init (); $ url = 'http: // Ihre-Laravel-Site-URL / oauth / token'; $ parach = array ('grant_typl' = '' authorization_code '),' client_id '=>' 1 ',' client_secret '=>' zMm0tQ9Cp7lkjk3QTgPy1pssoT1X0u7sg0YWUW01 ',' redirect_uri '=>' http '. , 'code' => $ _REQUEST ['code']); curl_setopt ($ ch, CURLOPT_URL, $ url); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); $ params_string = "; if (is_array ($ params) && count ($ params)) foreach ($ params als $ key => $ value) $ params_string. = $ key. '='. $ value. '&' ; rtrim ($ params_string, '&'); curl_setopt ($ ch, CURLOPT_POST, Anzahl ($ params)); curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ params_string); $ result = curl_exec ($ ch); $ ch); $ response = json_decode ($ result);Als Nächstes prüft die Drittanbieteranwendung die Antwort der CURL-Anforderung, um zu sehen, ob sie an erster Stelle ein gültiges Zugriffstoken enthält.
Sobald die Drittanbieteranwendung das Zugriffstoken erhält, könnte sie dieses Token verwenden, um weitere API-Aufrufe auszuführen, um bei Bedarf Ressourcen von der Laravel-Anwendung anzufordern. Natürlich muss das Zugriffstoken in jeder Anforderung übergeben werden, die Ressourcen von der Laravel-Anwendung anfordert.
Wir haben versucht, den Anwendungsfall nachzuahmen, indem die Anwendung eines Drittanbieters auf die Benutzerinformationen aus der Laravel-Anwendung zugreifen möchte. Und wir haben bereits einen API-Endpunkt, http: // Ihre-Laravel-Site-URL / api / user / get, in der Laravel-Anwendung entwickelt, die dies ermöglicht.
// Prüfen Sie, ob die Antwort access_token enthält if (isset ($ response-> access_token) && $ response-> access_token) // Sie möchten das access_token in der Sitzung speichern, obwohl… $ access_token = $ response-> access_token; // Verwenden Sie das obige Token, um weitere API-Aufrufe in dieser Sitzung durchzuführen oder bis das Zugriffstoken abgelaufen ist. $ ch = curl_init (); $ url = 'http: // Ihre-Laravel-Site-URL / api / user / get'; $ header = array ('Authorization: Bearer'. $ access_token); $ query = http_build_query (array ('uid' => '1')); curl_setopt ($ ch, CURLOPT_URL, $ url. '?'. $ query); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ ch, CURLOPT_HTTPHEADER, $ header); $ result = curl_exec ($ ch); curl_close ($ ch); $ response = json_decode ($ result); var_dump ($ result);Das ist also der vollständige Ablauf, wie Sie die OAuth2-APIs in Laravel verwenden sollen.
Damit sind wir am Ende dieses Artikels angelangt.
Fazit
Heute haben wir die Passport-Bibliothek in Laravel erkundet, wodurch wir einen OAuth2-Server sehr einfach in einer Anwendung einrichten können.
Für diejenigen unter Ihnen, die entweder gerade mit Laravel beginnen oder Ihr Wissen, Ihre Site oder Anwendung mit Erweiterungen erweitern möchten, haben wir eine Vielzahl von Möglichkeiten, die Sie in Envato Market lernen können.
Zögern Sie nicht, teilen Sie Ihre Gedanken und Fragen mit dem untenstehenden Feed!