Dalam aplikasi mudah alih dan web semasa, API adalah bahagian penting Ia menyediakan antara muka interaktif untuk pengguna dan aplikasi. Walau bagaimanapun, API ini juga menimbulkan risiko kepada pengguna berniat jahat dan penggodam, dan boleh membawa kepada kebocoran data sensitif. Oleh itu, API mesti dilindungi untuk menghalang capaian yang tidak dibenarkan. OAuth 2.0 ialah cara yang terbukti untuk membolehkan anda mengakses API melalui token sambil memastikan anda diberi kuasa untuk berbuat demikian.
Dalam artikel ini, kami akan meneroka cara menyepadukan OAuth 2.0 dalam PHP untuk menjamin API.
Apakah itu OAuth 2.0?
OAuth 2.0 ialah standard terbuka yang membolehkan pengguna memberi kebenaran kepada pihak ketiga untuk mengakses sumber mereka (cth., foto, dokumen, kenalan, dll.). Lebih khusus lagi, OAuth 2.0 menggunakan token kebenaran untuk mengakses sumber mereka bagi pihak pengguna. Token akses ialah bukti kelayakan yang dikeluarkan oleh pelayan kebenaran dan diberikan kepada pemanggil apabila mengakses sumber. Pemanggil boleh menggunakan token ini dengan setiap permintaan untuk menunjukkan bahawa mereka diberi kuasa untuk mengakses sumber tersebut.
Mengintegrasikan OAuth 2.0 dalam PHP
Dalam PHP, terdapat banyak perpustakaan OAuth 2.0 untuk dipilih. Dalam artikel ini, kami akan memperkenalkan proses pelaksanaan OAuth 2.0 menggunakan pakej phpleague/oauth2-client.
Langkah 1: Pasang pakej phpleague/oauth2-client
Kita perlu memasang pakej phpleague/oauth2-client terlebih dahulu. Ia boleh dipasang menggunakan pengurus pakej Komposer. Navigasi ke direktori projek anda dalam terminal atau antara muka baris arahan dan jalankan arahan berikut di sana:
composer require league/oauth2-client
Langkah 2: Sediakan klien penyedia
Sekarang, kita perlu menentukan hujung pelanggan penyedia. Di sini kami menggunakan penyedia OAuth GitHub sebagai contoh. Mula-mula, tukar nilai pemalar CLIENT_ID dan CLIENT_SECRET dengan bukti kelayakan aplikasi sebenar anda.
<?php require 'vendor/autoload.php'; use LeagueOAuth2ClientProviderGithub; const CLIENT_ID = 'your_client_id'; const CLIENT_SECRET = 'your_client_secret'; const REDIRECT_URI = 'http://localhost/oauth2/callback.php'; $provider = new Github([ 'clientId' => CLIENT_ID, 'clientSecret' => CLIENT_SECRET, 'redirectUri' => REDIRECT_URI, ]);
Langkah 3: Dapatkan kod kebenaran
Seterusnya, kita perlu mendapatkan kod kebenaran. Kod kebenaran ialah token sementara yang digunakan untuk mengesahkan identiti apabila mendapatkan lagi token akses.
<?php $authorizationUrl = $provider->getAuthorizationUrl([ 'scope' => ['user', 'repo', 'notifications'] ]); $_SESSION['oauth2state'] = $provider->getState(); header('Location: ' . $authorizationUrl);
Dalam kod di atas, kaedah getAuthorizationUrl()
mengembalikan URL kebenaran, melompat ke URL ini akan mengarahkan pengguna ke GitHub, meminta mereka memberikan token akses. Apabila GitHub memberi kebenaran, ia akan mengubah hala pengguna ke URI ubah hala yang mengandungi kod kebenaran.
Langkah 4: Dapatkan Token Akses
Sekarang, kita perlu mendapatkan token akses menggunakan kod kebenaran yang kita dapat pada langkah sebelumnya.
<?php if (isset($_GET['code']) && isset($_GET['state']) && isset($_SESSION['oauth2state'])) { if ($_GET['state'] === $_SESSION['oauth2state']) { try { $token = $provider->getAccessToken('authorization_code', [ 'code' => $_GET['code'] ]); $accessToken = $token->getToken(); $refreshToken = $token->getRefreshToken(); $expires = $token->getExpires(); } catch (Exception $e) { exit('Failed to get access token: ' . $e->getMessage()); } // Get the user object. try { $user = $provider->getResourceOwner($token); $name = $user->getName(); $email = $user->getEmail(); $imageUrl = $user->getAvatarUrl(); $profileUrl = $user->getHtmlUrl(); } catch (Exception $e) { exit('Failed to get user: ' . $e->getMessage()); } // Store the access token and user data somewhere // for use in your application. $_SESSION['github_access_token'] = $accessToken; $_SESSION['github_refresh_token'] = $refreshToken; $_SESSION['github_expires'] = $expires; $_SESSION['github_user_name'] = $name; $_SESSION['github_user_email'] = $email; $_SESSION['github_user_image'] = $imageUrl; $_SESSION['github_user_profile_url'] = $profileUrl; // Redirect the user to the original page // or some other authorized page in your application. header('Location: /'); exit(); } else { exit('Invalid state'); } }
Dalam kod di atas, kami mula-mula mendapat token akses menggunakan kaedah getAccessToken()
. Kemudian, kami menggunakan kaedah getResourceOwner()
untuk mendapatkan objek pengguna. Akhir sekali, kami menyimpan data pengguna dan token akses dalam sesi.
Langkah 5: Panggil API menggunakan token akses
Akhir sekali, kami boleh memanggil API yang dilindungi menggunakan token akses. Dalam contoh ini, kami akan menggunakan API GitHub, yang memerlukan kami untuk mengesahkan menggunakan token akses.
<?php $client = new GuzzleHttpClient(); $response = $client->request('GET', 'https://api.github.com/user', [ 'headers' => [ 'Authorization' => 'Bearer ' . $_SESSION['github_access_token'], 'User-Agent' => 'OAuth2 Client' ] ]); $body = $response->getBody(); $userData = json_decode($body, true);
Dalam kod di atas, kami memanggil API GitHub menggunakan klien HTTP Guzzle. Kami menetapkan pengepala Keizinan dengan token akses untuk menunjukkan bahawa kami mempunyai akses kepada API ini.
Kesimpulan
Menyepadukan OAuth 2.0 dalam PHP ialah cara terbaik untuk menjamin API anda. Menggunakan pakej phpleague/oauth2-client kami boleh mendapatkan token akses daripada pembekal dan menggunakan token itu untuk memanggil API yang dilindungi. Selain itu, kami boleh menyimpan data dan token pengguna untuk kegunaan masa hadapan.
Kini anda boleh mula menyepadukan OAuth 2.0 untuk melindungi API anda dan melindungi data pengguna.
Atas ialah kandungan terperinci Cara mengintegrasikan OAuth 2.0 dalam PHP untuk mengamankan API. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!