Rumah > Artikel > pembangunan bahagian belakang > OAuth dalam PHP: Membina sistem CMS yang selamat
OAuth dalam PHP: Membina sistem CMS yang selamat
在现代的互联网应用中,用户的身份验证和授权是至关重要的。OAuth (开放授权) 是一种用于身份验证和授权的开放标准,它允许用户授权第三方应用访问其资源,而不需要直接提供用户名和密码。在本文中,我们将探讨如何使用PHP中的OAuth来构建一个安全的CMS系统,并提供一些具体的代码示例。
Sebelum kita mula, marilah kita memahami beberapa konsep asas OAuth.
Terdapat banyak perpustakaan OAuth tersedia untuk PHP dan kami boleh menggunakannya untuk memudahkan pelaksanaan OAuth. Dalam artikel ini, kami akan menggunakan perpustakaan klien phpleague/oauth2.
Gunakan Komposer untuk pemasangan kebergantungan.
composer require league/oauth2-client
Sebelum menggunakan OAuth, kami perlu mendaftarkan apl kami pada pelayan kebenaran untuk mendapatkan ID dan kunci pelanggan. Langkah yang tepat berbeza-beza bergantung pada pembekal OAuth. Mengambil OAuth 2.0 sebagai contoh, kita boleh menggunakan GitHub sebagai pelayan kebenaran.
Seterusnya, kami akan menggunakan contoh khusus untuk menunjukkan cara melaksanakan proses OAuth.
Mula-mula, buat fail index.php dan tambah kod berikut:
<?php require_once 'vendor/autoload.php'; $provider = new LeagueOAuth2ClientProviderGithub([ 'clientId' => 'YOUR_CLIENT_ID', 'clientSecret' => 'YOUR_CLIENT_SECRET', 'redirectUri' => 'http://localhost/callback.php', ]); session_start(); if (!isset($_GET['code'])) { $authUrl = $provider->getAuthorizationUrl(); $_SESSION['oauth2state'] = $provider->getState(); header('Location: ' . $authUrl); exit; } elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) { unset($_SESSION['oauth2state']); exit('Invalid state'); } else { $token = $provider->getAccessToken('authorization_code', [ 'code' => $_GET['code'] ]); // 使用访问令牌进行API调用 // ... }
Dalam kod di atas, kami mula-mula memperkenalkan kelas yang diperlukan dan menggunakan ID klien, kunci dan URL ubah hala yang kami dapat semasa mendaftar apl Mulakan penyedia GitHub .
Seterusnya, kami menggunakan kaedah getAuthorizationUrl
untuk mendapatkan URL kebenaran dan menyimpan keadaan OAuth dalam sesi. getAuthorizationUrl
方法获取授权URL,并将OAuth状态存储在会话中。
如果URL中没有code
code
dalam URL, kami mengubah hala pengguna ke URL kebenaran. Setelah pengguna berjaya dibenarkan, GitHub akan mengubah hala ke URL panggil balik yang kami sediakan. Dalam skrip panggil balik callback.php, tambahkan kod berikut untuk melengkapkan aliran OAuth: <?php require_once 'vendor/autoload.php'; $provider = new LeagueOAuth2ClientProviderGithub([ 'clientId' => 'YOUR_CLIENT_ID', 'clientSecret' => 'YOUR_CLIENT_SECRET', 'redirectUri' => 'http://localhost/callback.php', ]); session_start(); if (!isset($_GET['code'])) { exit('Authorization code not found'); } else { try { $token = $provider->getAccessToken('authorization_code', [ 'code' => $_GET['code'], ]); } catch (LeagueOAuth2ClientProviderExceptionIdentityProviderException $e) { exit('Failed to obtain access token'); } // 使用访问令牌进行API调用 // ... }Dalam skrip panggil balik, kami sekali lagi memulakan penyedia GitHub dengan ID pelanggan, rahsia dan URL ubah hala. Kami kemudian cuba mendapatkan token akses melalui kod kebenaran.
<?php // 使用访问令牌进行API调用 $response = $provider->getAuthenticatedRequest( 'GET', 'https://api.github.com/user', $token ); $httpClient = $provider->getHttpClient(); $user = json_decode($httpClient->send($response)->getBody(), true); echo 'Hello, ' . $user['login'];Dalam contoh di atas, kami menggunakan token akses untuk mendapatkan maklumat pengguna semasa melalui permintaan GET dan memaparkan keputusan pada halaman.
Atas ialah kandungan terperinci OAuth dalam PHP: Membina sistem CMS yang selamat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!