Da die Verwendung von APIs immer beliebter wird, wird der Schutz der Sicherheit und Skalierbarkeit von APIs immer wichtiger. OAuth2 hat sich zu einem weit verbreiteten API-Sicherheitsprotokoll entwickelt, das Anwendungen den Zugriff auf geschützte Ressourcen durch Autorisierung ermöglicht. Zur Implementierung der OAuth2-Authentifizierung bietet Laravel Passport eine einfache und flexible Möglichkeit. In diesem Artikel erfahren Sie, wie Sie die API-OAuth2-Authentifizierung mit Laravel Passport implementieren.
Laravel Passport ist eine offiziell bereitgestellte OAuth2-Serverbibliothek, mit der Sie Ihrer Laravel-Anwendung problemlos eine OAuth2-Authentifizierung hinzufügen können. Es bietet API-Authentifizierung für Clients des Laravel-Frameworks, schützt APIs und schränkt den Ressourcenzugriff durch Token ein. Mit wenigen Konfigurationsschritten können Sie einen sicheren OAuth2-Server erstellen und Authentifizierung und Autorisierung für Ihre API bereitstellen.
Um Laravel Passport nutzen zu können, müssen Sie es installieren. Sie können es über den Composer-Paketmanager installieren:
composer require laravel/passport
Sobald Sie Laravel Passport installiert haben, müssen Sie Migrationen ausführen, um die erforderlichen Datenbanktabellen zu erstellen:
php artisan migrate
Um Laravel Passport zu aktivieren, müssen Sie den ServiceProvider und die Middleware registrieren . Fügen Sie den folgenden ServiceProvider und die folgende Middleware in der Datei config/app.php hinzu:
'providers' => [ // ... LaravelPassportPassportServiceProvider::class, ], 'middleware' => [ // ... LaravelPassportHttpMiddlewareCreateFreshApiToken::class, ],
Laravel Passport erfordert eine „Schlüssel“-Tabelle für die Ausgabe von Zugriffstokens und Aktualisierungstokens. Durch Ausführen des folgenden Befehls wird diese Tabelle generiert:
php artisan passport:install
Dadurch werden ein verschlüsseltes RSA-Schlüsselpaar zum Signieren und Überprüfen von Token sowie ein Client namens „personal_access_client“ und ein Client namens „password_client“ erstellt. Diese beiden Clients werden verwendet, um verschiedene Arten von Token zu erstellen. Der erste Client wird zum Generieren persönlicher Zugriffstoken verwendet, die dem Client den Zugriff auf jeden mit OAuth2-Authentifizierung gesicherten API-Endpunkt ermöglichen. Der zweite Client wird zum Erstellen von Passwort-Autorisierungstokens verwendet, die es dem Client ermöglichen, über Benutzernamen und Passwort ein Zugriffstoken zu erhalten.
In diesem Prozess müssen Sie auch Laravel Passport in Ihrer config/auth.php-Datei konfigurieren. Sie müssen den Passport-Treiber zum API-Guard hinzufügen, damit Laravel Passport alles im Zusammenhang mit OAuth2 verarbeiten kann. Ein Beispiel ist wie folgt:
'guards' => [ // ... 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],
Da wir nun die Einrichtung abgeschlossen haben, können wir mit der Erstellung von API-Routen und Controllern beginnen.
Zuerst müssen Sie Ihre API-Routen definieren. Nehmen wir zum Beispiel an, Sie haben einen API-Endpunkt, um eine Liste von Aufgaben abzurufen:
Route::get('/tasks', 'TaskController@index')->middleware('auth:api');
Als Nächstes müssen Sie einen Controller erstellen, der die Anfrage verarbeitet und auf die Aufgaben reagiert:
class TaskController extends Controller { public function index() { $tasks = Task::all(); return response()->json([ 'tasks' => $tasks, ]); } }
Fügen Sie den Parameter „auth:api“ ein Die Middleware-Methode weist uns an, API-Schutzvorrichtungen zu verwenden, um Routen zu schützen.
Jetzt sehen wir uns an, wie man die OAuth2-Authentifizierung durchführt und ein Zugriffstoken erhält. Sie müssen einen Client erstellen, der den OAuth2-Fluss mithilfe des Kennworts autorisiert, um das Zugriffstoken zu erhalten. Auf diese Weise können Sie sich mit API-Anfragen am API-Endpunkt authentifizieren.
Sie können einen neuen Client in der Clientliste von Laravel Passport erstellen oder die Methode Passport::client() in Ihrem Code verwenden, um eine zufällige Client-ID und ein Client-Geheimnis für den Client zu generieren. Sie können die Client-ID und das Client-Geheimnis in Ihrer .env-Datei speichern oder sie direkt in Ihrer Passport::client()-Methode bereitstellen. Diese Methode erstellt einen neuen Client und gibt die Client-ID und das Client-Geheimnis zurück:
use LaravelPassportClient; use IlluminateSupportFacadesDB; $client = $this->createClient(); public function createClient() { $client = Client::forceCreate([ 'user_id' => null, 'name' => 'Test Client', 'secret' => str_random(40), 'redirect' => '', 'personal_access_client' => false, 'password_client' => true, 'revoked' => false, ]); DB::table('oauth_client_grants')->insert([ 'client_id' => $client->id, 'grant_id' => 1, ]); return $client; }
Nachdem wir nun einen Client haben, müssen wir Laravel Passport im Controller verwenden, um das Zugriffstoken abzurufen und es für den Zugriff auf den geschützten API-Endpunkt zu verwenden. Wir müssen die OAuth2-Authentifizierung im Controller mithilfe des folgenden Codes implementieren:
use IlluminateSupportFacadesAuth; use LaravelPassportClientRepository; class TaskController extends Controller { protected $clients; public function __construct(ClientRepository $clients) { $this->clients = $clients; } public function index() { $client = $this->clients->find(2); $response = $this->actingAsClient($client, function () { return $this->get('/api/tasks'); }); return $response->getContent(); } protected function actingAsClient($client, $callback, $scopes = []) { $proxy = new LaravelPassportHttpControllersAccessTokenController(); $token = $proxy->issueToken( $this->getPersonalAccessTokenRequest($client, $scopes) ); Auth::guard('web')->loginUsingId($client->user_id); $callback($token); return $this->app->make(IlluminateHttpRequest::class); } protected function getPersonalAccessTokenRequest($client, $scopes = []) { $data = [ 'grant_type' => 'client_credentials', 'client_id' => $client->id, 'client_secret' => $client->secret, 'scope' => implode(' ', $scopes), ]; return IlluminateHttpRequest::create('/oauth/token', 'POST', $data); } }
Mithilfe der Methode „actingAsClient()“ können wir die Ausführung der Anforderung als Client simulieren, und jede Methode im Controller kann diese Methode für die OAuth2-Authentifizierung verwenden. Wir müssen ein Clientobjekt, eine Rückruffunktion zum Ausführen der API-Anfrage und optional die Berechtigungen zum Hinzufügen zur Anfrage übergeben.
Nachdem wir nun die OAuth2-Authentifizierungskonfiguration von Laravel Passport abgeschlossen haben, können wir mithilfe des obigen Codemusters problemlos eine sichere OAuth2-Authentifizierung auf unseren API-Endpunkten implementieren. Passport ist ein relativ neues Projekt. Es ist jedoch perfekt in Laravel integriert und bietet mehrere OAuth2-Authentifizierungsdienste, sodass Sie Ihrer API problemlos Authentifizierung und Autorisierung hinzufügen können. Wenn Sie eine Laravel-Anwendung ausführen und die OAuth2-Authentifizierung hinzufügen müssen, ist Laravel Passport ideal für diesen Zweck.
Das obige ist der detaillierte Inhalt vonLaravel-Entwicklung: Wie implementiert man die API-OAuth2-Authentifizierung mit Laravel Passport?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!