Rumah  >  Artikel  >  rangka kerja php  >  Pembangunan Laravel: Bagaimana untuk mengurus OAuth2 dengan Pasport Laravel?

Pembangunan Laravel: Bagaimana untuk mengurus OAuth2 dengan Pasport Laravel?

WBOY
WBOYasal
2023-06-13 17:14:311370semak imbas

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.

Jana kunci API menggunakan Pasport Laravel

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.

Mengkonfigurasi perkhidmatan OAuth2

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,
    ],
],

Buat Laluan OAuth2

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..

Mentakrifkan klien OAuth2

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.

Jana Token Akses OAuth2

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.

Gunakan token akses OAuth2 untuk membuat panggilan API

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,
    ],
]);

Kesimpulan

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn