Heim >PHP-Framework >Laravel >Laravel-Entwicklung: Wie verwaltet man OAuth2 mit Laravel Passport?

Laravel-Entwicklung: Wie verwaltet man OAuth2 mit Laravel Passport?

WBOY
WBOYOriginal
2023-06-13 17:14:311388Durchsuche

Bei der Entwicklung von Webanwendungen ist es häufig erforderlich, das OAuth2-Protokoll zur Benutzerauthentifizierung und -autorisierung zu verwenden, damit Benutzer Dienste von Drittanbietern sicher nutzen können. Durch die Verwendung von Laravel Passport können Sie das OAuth2-Protokoll problemlos handhaben, um Authentifizierung und Autorisierung in Laravel-Anwendungen zu implementieren.

Laravel Passport ist ein Open-Source-Softwarepaket, das eine vollständige OAuth2-Serverimplementierung bereitstellt, einschließlich Token-Generierung, Token-Verwaltung, Umfang und anderen Funktionen, wodurch die Implementierung des OAuth2-Protokolls in Laravel-Anwendungen sehr einfach ist.

In diesem Artikel erfahren Sie, wie Sie Laravel Passport zum Verwalten des OAuth2-Protokolls verwenden.

API-Schlüssel mit Laravel Passport generieren

Bevor wir das OAuth2-Protokoll verwenden, müssen wir einen API-Schlüssel generieren. Der API-Schlüssel wird als OAuth2-Client-ID und -Geheimnis verwendet und zum Abrufen des Zugriffstokens verwendet. Wir können API-Schlüssel mit dem von Laravel Passport bereitgestellten artisan-Befehl generieren.

Installieren Sie zunächst Laravel Passport mit Composer:

composer require laravel/passport

Führen Sie dann den Migrationsbefehl aus:

php artisan migrate

Als nächstes generieren Sie den API-Schlüssel mit dem Passport-Befehl client:secret: client:secret命令生成API密钥:

php artisan passport:client --password

这将生成一个客户端ID和一个客户端密钥。

配置OAuth2服务

在生成API密钥之后,我们需要配置OAuth2服务。Laravel Passport提供了一些配置选项,可以通过修改Laravel应用程序的config/auth.php文件来配置这些选项。

auth.php文件中,我们需要设置api驱动程序为Passport驱动程序,这样Laravel就会使用Passport来处理用户身份验证和授权。

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
        'hash' => false,
    ],
],

创建OAuth2路由

接下来,我们需要在应用程序中创建一些OAuth2路由,这些路由将用于处理OAuth2请求。我们可以使用Laravel Passport提供的自动生成路由的artisan命令来创建这些路由。

php artisan passport:routes

这将自动生成以下路由:

+-----------+------------------------+-------------------------------------------------+---------------------------------+------------------------------------------------------------------+------------------------+
| Method    | URI                    | Name                                            | Action                          | Middleware                                                       | In                                                                                                             |
+-----------+------------------------+-------------------------------------------------+---------------------------------+------------------------------------------------------------------+------------------------+
| GET|HEAD  | oauth/authorize        | passport.authorizations.authorize              | LaravelPassportHttpControllersAuthorizationController@show   | web,auth                                                         | LaravelPassportHttpMiddlewareCheckClientCredentials,can:view-authorizations                                |
| POST      | oauth/authorize        | passport.authorizations.approve                | LaravelPassportHttpControllersApproveAuthorizationController | web,auth                                                         | LaravelPassportHttpMiddlewareCheckClientCredentials,can:approve-authorizations                             |
| DELETE    | oauth/authorize        | passport.authorizations.deny                   | LaravelPassportHttpControllersDenyAuthorizationController    | web,auth                                                         | LaravelPassportHttpMiddlewareCheckClientCredentials,can:deny-authorizations                               |
| POST      | oauth/clients          | passport.clients.store                          | LaravelPassportHttpControllersClientController@store          | web,auth                                                         | LaravelPassportHttpMiddlewareCheckClientCredentials,can:create-clients                                      |
| GET|HEAD  | oauth/clients          | passport.clients.index                          | LaravelPassportHttpControllersClientController@forUser        | web,auth                                                         | LaravelPassportHttpMiddlewareCheckClientCredentials,can:view-clients                                        |
| PUT       | oauth/clients/{client} | passport.clients.update                        | LaravelPassportHttpControllersClientController@update         | web,auth                                                         | LaravelPassportHttpMiddlewareCheckClientCredentials,can:update-clients                                      |
| DELETE    | oauth/clients/{client} | passport.clients.destroy                       | LaravelPassportHttpControllersClientController@destroy        | web,auth                                                         | LaravelPassportHttpMiddlewareCheckClientCredentials,can:delete-clients                                      |
| POST      | oauth/token           | passport.token                                  | LaravelPassportHttpControllersAccessTokenController@issueToken| throttle                                                         | LaravelPassportHttpMiddlewareCheckClientCredentials,can:issue-tokens                                        |
| POST      | oauth/token/refresh   | passport.token.refresh                          | LaravelPassportHttpControllersTransientTokenController@refresh | throttle                                                         | LaravelPassportHttpMiddlewareCheckClientCredentials,can:refresh-tokens                                      |
| DELETE    | oauth/tokens/{token}  | passport.tokens.destroy                         | LaravelPassportHttpControllersAuthorizedAccessTokenController@destroy | web,auth                                                         | LaravelPassportHttpMiddlewareCheckClientCredentials,throttle:60,1,oauth                                                                  |
| GET|HEAD  | oauth/tokens          | passport.tokens.index                           | LaravelPassportHttpControllersAuthorizedAccessTokenController@forUser  | web,auth                                                         | LaravelPassportHttpMiddlewareCheckClientCredentials,can:view-tokens                                        |
| DELETE    | oauth/tokens          | passport.tokens.destroy.all                     | LaravelPassportHttpControllersAuthorizedAccessTokenController@destroyAll| web,auth                                                         | LaravelPassportHttpMiddlewareCheckClientCredentials,can:delete-tokens                                      |
+-----------+------------------------+-------------------------------------------------+---------------------------------+------------------------------------------------------------------+------------------------+

这些路由都是Passport内置的路由,并使用passport.前缀名称。

定义OAuth2客户端

现在我们已经准备好了,可以开始定义OAuth2客户端了。我们可以使用先前生成的API密钥来创建OAuth2客户端。

在数据库中创建一个新的OAuth2客户端。我们可以手动创建它,或使用Laravel Passport提供的artisan命令passport:client来创建它。

在创建过程中,我们需要指定客户端的名称、密钥、回调URL等。

手动创建:

INSERT INTO `oauth_clients` (`id`, `user_id`, `name`, `secret`, `redirect`, `revoked`, `personal_access_client`, `password_client`, `updated_at`, `created_at`) 
VALUES (1, NULL, 'My Client', 'my-client-secret', 'http://localhost/callback', 0, 0, 1, '2021-10-01 00:00:00', '2021-10-01 00:00:00');

用artisan创建:

php artisan passport:client --client --name="My Client"

运行此命令后,它将自动生成OAuth2客户端,并显示客户端ID和密钥。

生成OAuth2访问令牌

现在我们已经准备好了OAuth2客户端,并定义了OAuth2路由,我们可以开始使用OAuth2协议来生成访问令牌。

我们可以使用passport:client命令生成访问令牌:

php artisan passport:client --client --password

运行此命令后,它将生成一个OAuth2客户端并自动为该客户端生成一个访问令牌。

使用OAuth2访问令牌进行API调用

最后一步是使用OAuth2访问令牌进行API调用。我们可以使用Laravel自带的Guzzle来发送HTTP请求,并将访问令牌作为Authorization Header发送。

use GuzzleHttpClient;

$client = new Client();

$response = $client->request('GET', 'http://localhost/api/user', [
    'headers' => [
        'Authorization' => 'Bearer '.$accessToken,
    ],
]);

$body = $response->getBody()->getContents();

需要注意的是,对于每个请求,我们都需要发送有效的访问令牌。这可以通过使用Passport::actingAs

use LaravelPassportPassport;

Passport::actingAs($user);

$response = $client->request('GET', 'http://localhost/api/user', [
    'headers' => [
        'Authorization' => 'Bearer '.$accessToken,
    ],
]);

Dadurch wird A. generiert Client-ID und ein Client-Geheimnis.

OAuth2-Dienst konfigurieren

Nachdem wir den API-Schlüssel generiert haben, müssen wir den OAuth2-Dienst konfigurieren. Laravel Passport bietet einige Konfigurationsoptionen, die durch Ändern der Datei config/auth.php der Laravel-Anwendung konfiguriert werden können. 🎜🎜In der Datei auth.php müssen wir den api-Treiber auf den Passport-Treiber einstellen, damit Laravel Passport für die Benutzerauthentifizierung und -autorisierung verwendet. 🎜rrreee🎜OAuth2-Routen erstellen🎜🎜Als nächstes müssen wir einige OAuth2-Routen in der Anwendung erstellen, die zur Bearbeitung von OAuth2-Anfragen verwendet werden. Wir können diese Routen mit dem Befehl artisan erstellen, der automatisch Routen generiert, die von Laravel Passport bereitgestellt werden. 🎜rrreee🎜Dadurch werden automatisch die folgenden Routen generiert: 🎜rrreee🎜Diese Routen sind in Passport integrierte Routen und verwenden den Präfixnamen passport.. 🎜🎜Definieren Sie den OAuth2-Client🎜🎜Jetzt können wir mit der Definition des OAuth2-Clients beginnen. Wir können den zuvor generierten API-Schlüssel verwenden, um einen OAuth2-Client zu erstellen. 🎜🎜Erstellen Sie einen neuen OAuth2-Client in der Datenbank. Wir können es manuell erstellen oder den von Laravel Passport bereitgestellten Handwerkerbefehl passport:client verwenden, um es zu erstellen. 🎜🎜Während des Erstellungsprozesses müssen wir den Namen, den Schlüssel, die Rückruf-URL usw. des Kunden angeben. 🎜🎜Manuell erstellen: 🎜rrreee🎜Mit Handwerker erstellen: 🎜rrreee🎜Nach der Ausführung dieses Befehls wird automatisch der OAuth2-Client generiert und die Client-ID und das Geheimnis angezeigt. 🎜🎜OAuth2-Zugriffstoken generieren🎜🎜Da wir nun den OAuth2-Client bereit und die OAuth2-Routen definiert haben, können wir mit der Verwendung des OAuth2-Protokolls zum Generieren von Zugriffstoken beginnen. 🎜🎜Wir können ein Zugriffstoken mit dem Befehl passport:client generieren: 🎜rrreee🎜Nachdem dieser Befehl ausgeführt wurde, wird ein OAuth2-Client generiert und automatisch ein Zugriffstoken für den Client generiert. 🎜🎜Verwenden Sie das OAuth2-Zugriffstoken, um einen API-Aufruf durchzuführen.🎜🎜Der letzte Schritt besteht darin, das OAuth2-Zugriffstoken zu verwenden, um einen API-Aufruf durchzuführen. Wir können Laravels eigenen Guzzle verwenden, um HTTP-Anfragen zu senden und das Zugriffstoken als Autorisierungsheader zu senden. 🎜rrreee🎜Zu beachten ist, dass wir für jede Anfrage ein gültiges Zugriffstoken senden müssen. Dies kann durch die Verwendung der Methode Passport::actingAs erreicht werden, die die angegebene Benutzer-ID durch ein gültiges Autorisierungstoken ersetzt. 🎜rrreee🎜Fazit🎜🎜In diesem Artikel haben wir vorgestellt, wie man Laravel Passport zur Verwaltung des OAuth2-Protokolls verwendet. Mit Laravel Passport ist es einfach, API-Schlüssel zu generieren, OAuth2-Dienste zu konfigurieren, OAuth2-Routen zu erstellen, OAuth2-Clients zu definieren, OAuth2-Zugriffstoken zu generieren und diese für API-Aufrufe zu verwenden. Laravel Passport ist eine sehr gute Wahl für die Entwicklung von Webanwendungen mit dem OAuth2-Protokoll. 🎜

Das obige ist der detaillierte Inhalt vonLaravel-Entwicklung: Wie verwaltet man OAuth2 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