Dalam pembangunan aplikasi web, selalunya perlu menggunakan protokol OAuth2 untuk pengesahan dan kebenaran pengguna supaya pengguna boleh menggunakan perkhidmatan pihak ketiga dengan selamat. Dengan menggunakan Pasport Laravel, anda boleh mengendalikan protokol OAuth2 dengan mudah untuk melaksanakan pengesahan dan kebenaran dalam aplikasi Laravel.
Laravel Passport ialah pakej perisian sumber terbuka yang menyediakan pelaksanaan pelayan OAuth2 yang lengkap, termasuk penjanaan Token, pengurusan Token, skop dan fungsi lain, menjadikannya sangat mudah untuk melaksanakan protokol OAuth2 dalam aplikasi Laravel.
Artikel ini akan memperkenalkan anda cara menggunakan Pasport Laravel untuk mengurus protokol OAuth2.
Sebelum menggunakan protokol OAuth2, kita perlu menjana kunci API. Kunci API akan digunakan sebagai ID dan rahsia klien OAuth2 dan digunakan untuk mendapatkan token akses. Kami boleh menjana kunci API menggunakan arahan artisan yang disediakan oleh Laravel Passport.
Mula-mula, pasang Laravel Passport menggunakan komposer:
composer require laravel/passport
Kemudian, jalankan arahan migrasi:
php artisan migrate
Seterusnya, jana kunci API menggunakan perintah client:secret
Passport:
php artisan passport:client --password
Ini akan menjana ID pelanggan dan rahsia pelanggan.
Selepas menjana kunci API, kami perlu mengkonfigurasi perkhidmatan OAuth2. Pasport Laravel menyediakan beberapa pilihan konfigurasi yang boleh dikonfigurasikan dengan mengubah suai fail config/auth.php
aplikasi Laravel.
Dalam fail auth.php
, kita perlu menetapkan pemandu api
kepada pemandu Pasport supaya Laravel akan menggunakan Pasport untuk mengendalikan pengesahan dan kebenaran pengguna.
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', 'hash' => false, ], ],
Seterusnya, kita perlu mencipta beberapa laluan OAuth2 dalam aplikasi yang akan digunakan untuk mengendalikan permintaan OAuth2. Kita boleh mencipta laluan ini menggunakan arahan artisan yang menjana laluan secara automatik yang disediakan oleh Laravel Passport.
php artisan passport:routes
Ini akan menjana laluan berikut secara automatik:
+-----------+------------------------+-------------------------------------------------+---------------------------------+------------------------------------------------------------------+------------------------+ | 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 | +-----------+------------------------+-------------------------------------------------+---------------------------------+------------------------------------------------------------------+------------------------+
Laluan ini ialah laluan terbina dalam Pasport dan menggunakan nama awalan passport.
.
Kini kami bersedia untuk mula mentakrifkan klien OAuth2. Kami boleh menggunakan kunci API yang dijana sebelum ini untuk mencipta klien OAuth2.
Buat klien OAuth2 baharu dalam pangkalan data. Kita boleh menciptanya secara manual atau menggunakan perintah artisan passport:client
yang disediakan oleh Laravel Passport untuk menciptanya.
Semasa proses penciptaan, kami perlu menentukan nama pelanggan, kunci, URL panggil balik, dsb.
Buat secara manual:
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');
Buat dengan artisan:
php artisan passport:client --client --name="My Client"
Selepas menjalankan arahan ini, ia akan menjana klien OAuth2 secara automatik dan memaparkan ID klien dan rahsia.
Kini setelah kami menyediakan klien OAuth2 dan laluan OAuth2 ditentukan, kami boleh mula menggunakan protokol OAuth2 untuk menjana token akses.
Kami boleh menjana token akses menggunakan perintah passport:client
:
php artisan passport:client --client --password
Sebaik sahaja anda menjalankan arahan ini, ia akan menjana klien OAuth2 dan secara automatik menjana token akses untuk klien tersebut.
Langkah terakhir ialah menggunakan token akses OAuth2 untuk membuat panggilan API. Kami boleh menggunakan Guzzle
milik Laravel sendiri untuk menghantar permintaan HTTP dan menghantar token akses sebagai Pengepala Kebenaran.
use GuzzleHttpClient; $client = new Client(); $response = $client->request('GET', 'http://localhost/api/user', [ 'headers' => [ 'Authorization' => 'Bearer '.$accessToken, ], ]); $body = $response->getBody()->getContents();
Adalah penting untuk ambil perhatian bahawa untuk setiap permintaan kami perlu menghantar token akses yang sah. Ini boleh dicapai dengan menggunakan kaedah Passport::actingAs
, yang menggantikan ID pengguna yang ditentukan dengan token kebenaran yang sah.
use LaravelPassportPassport; Passport::actingAs($user); $response = $client->request('GET', 'http://localhost/api/user', [ 'headers' => [ 'Authorization' => 'Bearer '.$accessToken, ], ]);
Dalam artikel ini, kami memperkenalkan cara menggunakan Pasport Laravel untuk mengurus protokol OAuth2. Pasport Laravel memudahkan untuk menjana kunci API, mengkonfigurasi perkhidmatan OAuth2, mencipta laluan OAuth2, mentakrifkan klien OAuth2, menjana token akses OAuth2 dan menggunakannya untuk membuat panggilan API. Pasport Laravel ialah pilihan yang sangat baik apabila membangunkan aplikasi web menggunakan protokol OAuth2.
Atas ialah kandungan terperinci Pembangunan Laravel: Bagaimana untuk mengurus OAuth2 dengan Pasport Laravel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!