Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menggunakan OAuth2 dengan php?

Bagaimana untuk menggunakan OAuth2 dengan php?

王林
王林asal
2023-06-01 08:31:351529semak imbas

OAuth2 ialah protokol standard terbuka yang digunakan secara meluas yang digunakan untuk membenarkan akses kepada sumber pengguna tanpa menghantar nama pengguna dan kata laluan terus kepada aplikasi pihak ketiga, seperti rangkaian sosial seperti Google, Facebook dan Twitter.

Dalam PHP, anda boleh menggunakan perpustakaan OAuth2 siap sedia untuk melaksanakan aliran OAuth2 dengan mudah atau anda boleh membina pustaka anda sendiri untuk melaksanakannya.

Dalam artikel ini, kami akan menumpukan pada menggunakan pustaka OAuth2 yang sudah siap, cara menggunakan protokol OAuth2 untuk mendapatkan kebenaran pengguna dan mengakses sumber mereka.

  1. Pasang perpustakaan OAuth2

Pertama, kita perlu memasang perpustakaan OAuth2 yang tersedia. Pada masa ini, terdapat beberapa perpustakaan OAuth2 berbeza yang tersedia untuk pembangunan PHP, termasuk php-oauth2-client, thephpleague/oauth2-client, dan bshaffer/oauth2-server-php, antara lain. Dalam artikel ini, kami akan menggunakan thephpleague/oauth2-client sebagai pustaka OAuth2 kami.

Untuk memasang perpustakaan ini, anda boleh menggunakan Komposer, jalankan sahaja arahan berikut dalam terminal:

composer require league/oauth2-client
  1. Buat objek klien OAuth2

Sebaik sahaja kami mempunyai pustaka OAuth2 dipasang, kini kita boleh mencipta objek klien OAuth2. Pelanggan ini akan berkomunikasi dengan pembekal perkhidmatan mengikut protokol OAuth2 dan mengekalkan keadaan sesi antara kami dan pembekal perkhidmatan.

Dalam contoh ini, kami akan menggunakan GitHub sebagai pembekal OAuth2. Untuk mencipta objek klien, gunakan kod berikut:

$clientId = 'your_client_id'; // Your GitHub Client ID
$clientSecret = 'your_client_secret'; // Your GitHub Client Secret
$redirectUri = 'http://example.com/oauth2callback'; // Your redirect URI

$provider = new LeagueOAuth2ClientProviderGithub([
    'clientId'          => $clientId,
    'clientSecret'      => $clientSecret,
    'redirectUri'       => $redirectUri,
]);

Kod di atas akan mencipta objek klien OAuth2 bernama $provider, yang akan digunakan untuk mengakses penyedia OAuth2 pada GitHub. Antaranya, kami perlu menyediakan ID pelanggan, rahsia pelanggan dan URI panggilan balik yang diberikan kepada kami oleh GitHub.

  1. Dapatkan URL kebenaran

Dalam OAuth2, URL kebenaran digunakan untuk membimbing pengguna melalui proses kebenaran OAuth2. Kami perlu mengubah hala pengguna ke URL kebenaran supaya mereka boleh membenarkan aplikasi kami sebelum mengakses sumber GitHub yang diperlukan oleh aplikasi kami.

Untuk mendapatkan URL kebenaran, gunakan kod berikut:

$authorizationUrl = $provider->getAuthorizationUrl();

Kod di atas akan mengembalikan URL kebenaran yang kami perlukan untuk mengubah hala pengguna.

header('Location: ' . $authorizationUrl);
exit;
  1. Dapatkan Token Akses

Setelah pengguna berjaya membuat kebenaran OAuth2 pada GitHub, mereka akan diubah hala semula ke URL panggil balik yang disediakan oleh aplikasi kami. Pada ketika ini, kita perlu mendapatkan token akses untuk mengakses sumber GitHub yang memerlukan kebenaran.

Seterusnya, kita boleh menggunakan kod berikut untuk mendapatkan token akses:

$accessToken = $provider->getAccessToken('authorization_code', [
    'code' => $_GET['code']
]);

Kod di atas akan menggunakan kod kebenaran untuk meminta token akses dan mengembalikan objek $accessToken. Objek $accessToken ini mengandungi token akses dan sifat berkaitannya, seperti masa tamat tempoh dan token muat semula, dsb.

  1. Gunakan token akses untuk mengakses sumber GitHub

Sekarang kami telah memperoleh token akses, kami boleh menggunakannya untuk mengakses sumber GitHub yang memerlukan kebenaran, seperti mendapatkan pengguna maklumat Atau baca senarai repositorinya.

Gunakan kod berikut untuk mendapatkan maklumat pengguna:

$user = $provider->getResourceOwner($accessToken);
echo 'Hello, ' . $user->getName();

Kod di atas akan menggunakan token akses untuk memanggil API pemilik sumber di GitHub dan mengembalikan objek $user.

Sila ambil perhatian bahawa objek $user dalam kod di atas akan mengembalikan nama pengguna dan sifat berkaitan yang lain, yang boleh kami gunakan untuk mendapatkan maklumat tentang pengguna dan sumber GitHub yang lain.

  1. Muat semula token akses

Token akses mungkin tamat tempoh atau menjadi tidak sah, kami perlu menyemak statusnya pada masa jalan dan muat semula token jika perlu.

Gunakan kod berikut untuk menyemak dan memuat semula token akses:

if ($accessToken->hasExpired()) {
    $newAccessToken = $provider->getAccessToken('refresh_token', [
        'refresh_token' => $accessToken->getRefreshToken()
    ]);
}

// Use $newAccessToken to access protected resources

Kod di atas akan menyemak sama ada token akses telah tamat tempoh dan menggunakan atribut refresh_token untuk meminta objek $accessToken baharu, yang mengandungi Token akses yang diperbaharui dan sifat berkaitan lain.

Pada ketika ini, kami telah mempelajari cara menggunakan perpustakaan klien phpleague/oauth2 untuk melaksanakan proses OAuth2. Kini kami boleh menggunakannya untuk mengakses pelbagai penyedia OAuth2 seperti Google, Facebook, Twitter dan GitHub, antara lain.

Ringkasan

Dalam artikel ini, kami mempelajari cara menggunakan perpustakaan OAuth2 untuk membina klien OAuth2 dan menggunakan klien untuk mendapatkan kebenaran dan mengakses sumber yang dilindungi. Kami juga mempelajari cara menyemak dan memuat semula token akses untuk memastikan kami sentiasa mempunyai akses kepada sumber yang kami perlukan.

Sila ambil perhatian bahawa protokol OAuth2 mempunyai proses kebenaran yang kompleks dan butiran pelaksanaan, jadi berhati-hati dan berhati-hati diperlukan semasa membangunkan klien OAuth2. Walau bagaimanapun, menggunakan perpustakaan OAuth2 siap sedia, kami boleh menjadikan proses ini agak mudah dan mudah.

Atas ialah kandungan terperinci Bagaimana untuk menggunakan OAuth2 dengan php?. 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