Apabila penggunaan API menjadi semakin popular, melindungi keselamatan dan kebolehskalaan API menjadi semakin kritikal. OAuth2 telah menjadi protokol keselamatan API yang diterima pakai secara meluas yang membenarkan aplikasi mengakses sumber yang dilindungi melalui kebenaran. Untuk melaksanakan pengesahan OAuth2, Pasport Laravel menyediakan cara yang mudah dan fleksibel. Dalam artikel ini, kita akan belajar cara melaksanakan pengesahan API OAuth2 menggunakan Pasport Laravel.
Laravel Passport ialah perpustakaan pelayan OAuth2 yang disediakan secara rasmi yang boleh menambahkan pengesahan OAuth2 dengan mudah pada aplikasi Laravel anda. Ia menyediakan pengesahan API untuk pelanggan rangka kerja Laravel, melindungi API dan menyekat akses sumber melalui token. Dengan beberapa langkah konfigurasi, anda boleh mencipta pelayan OAuth2 yang selamat dan memberikan pengesahan dan kebenaran untuk API anda.
Untuk mula menggunakan Pasport Laravel, anda perlu memasangnya. Anda boleh memasangnya melalui pengurus pakej Komposer:
composer require laravel/passport
Setelah anda memasang Pasport Laravel, anda perlu menjalankan migrasi untuk mencipta jadual pangkalan data yang diperlukan:
php artisan migrate
Untuk mendayakan Pasport Laravel, anda perlu mendaftar ServiceProvider dan middleware. Tambahkan ServiceProvider dan middleware berikut dalam fail config/app.php:
'providers' => [ // ... LaravelPassportPassportServiceProvider::class, ], 'middleware' => [ // ... LaravelPassportHttpMiddlewareCreateFreshApiToken::class, ],
Laravel Passport memerlukan jadual "kunci" untuk mengeluarkan token akses dan token muat semula. Menjalankan arahan berikut akan menjana jadual ini:
php artisan passport:install
Ini akan mencipta pasangan kunci RSA yang disulitkan untuk menandatangani dan mengesahkan token, serta pelanggan bernama "personal_access_client" dan klien bernama "password_client". Kedua-dua pelanggan ini digunakan untuk mencipta pelbagai jenis token. Pelanggan pertama digunakan untuk menjana token akses peribadi yang membolehkan pelanggan mengakses mana-mana titik akhir API yang dijamin dengan pengesahan OAuth2. Pelanggan kedua digunakan untuk mencipta token kebenaran kata laluan yang membolehkan pelanggan mendapatkan token akses melalui nama pengguna dan kata laluan.
Semasa proses ini, anda juga perlu mengkonfigurasi Laravel Passport dalam fail config/auth.php anda. Anda perlu menambahkan pemandu pasport pada pengawal API supaya Pasport Laravel boleh mengendalikan semua yang berkaitan dengan OAuth2. Contohnya adalah seperti berikut:
'guards' => [ // ... 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],
Memandangkan kami mempunyai persediaan yang lengkap, kami boleh mula mencipta laluan dan pengawal API.
Pertama, anda perlu menentukan laluan API anda. Sebagai contoh, katakan anda mempunyai titik akhir API untuk mendapatkan senarai tugasan:
Route::get('/tasks', 'TaskController@index')->middleware('auth:api');
Seterusnya, anda perlu mencipta pengawal untuk mengendalikan permintaan dan membalas tugasan:
class TaskController extends Controller { public function index() { $tasks = Task::all(); return response()->json([ 'tasks' => $tasks, ]); } }
Dalam kaedah middleware menambah parameter " auth:api" untuk mengarahkan kami menggunakan pengawal API untuk melindungi laluan.
Sekarang mari lihat cara melaksanakan pengesahan OAuth2 dan mendapatkan token akses. Anda perlu mencipta klien yang akan membenarkan aliran OAuth2 menggunakan kata laluan untuk mendapatkan token akses. Dengan cara ini anda boleh mengesahkan pada titik akhir API dengan permintaan API.
Anda boleh mencipta pelanggan baharu dalam senarai pelanggan Laravel Passport, atau gunakan kaedah Passport::client() dalam kod anda untuk menjana id pelanggan rawak dan rahsia pelanggan untuk pelanggan. Anda boleh menyimpan id pelanggan dan rahsia pelanggan dalam fail .env anda atau anda boleh memberikannya terus dalam kaedah Passport::client() anda. Kaedah ini akan mencipta pelanggan baharu dan mengembalikan id pelanggan dan rahsia pelanggan:
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; }
Sekarang kita mempunyai pelanggan, kita perlu menggunakan Laravel Passport dalam pengawal untuk mendapatkan token akses dan menggunakannya untuk mengakses API yang dilindungi titik akhir. Kita perlu melaksanakan pengesahan OAuth2 dalam pengawal menggunakan kod berikut:
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); } }
Menggunakan kaedah actingAsClient() kita boleh mensimulasikan menjalankan permintaan sebagai pelanggan dan mana-mana kaedah dalam pengawal boleh menggunakan kaedah ini untuk Pengesahan OAuth2. Kami perlu menghantar objek klien, fungsi panggil balik untuk melaksanakan permintaan API, dan secara pilihan kebenaran untuk menambah permintaan.
Memandangkan kami telah melengkapkan konfigurasi pengesahan OAuth2 untuk Pasport Laravel, kami boleh melaksanakan pengesahan OAuth2 selamat dengan mudah pada titik akhir API kami dengan menggunakan corak kod di atas. Pasport adalah projek yang agak baru. Walau bagaimanapun, ia disepadukan dengan sempurna dengan Laravel dan menyediakan berbilang perkhidmatan pengesahan OAuth2, membolehkan anda menambah pengesahan dan kebenaran dengan mudah pada API anda. Jika anda menjalankan aplikasi Laravel dan perlu menambah pengesahan OAuth2, Pasport Laravel sesuai untuk tujuan ini.
Atas ialah kandungan terperinci Pembangunan Laravel: Bagaimana untuk melaksanakan pengesahan API OAuth2 menggunakan Pasport Laravel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!