Heim >PHP-Framework >Laravel >Laravel-Entwicklung: Wie implementiert man die API-OAuth2-Authentifizierung mit Laravel Passport?

Laravel-Entwicklung: Wie implementiert man die API-OAuth2-Authentifizierung mit Laravel Passport?

WBOY
WBOYOriginal
2023-06-13 23:13:54980Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn