Cara mengintegrasikan OAuth 2.0 dalam PHP untuk mengamankan API

WBOY
Lepaskan: 2023-06-17 11:02:01
asal
1402 orang telah melayarinya

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
Salin selepas log masuk

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,
]);
Salin selepas log masuk

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);
Salin selepas log masuk

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');
    }
}
Salin selepas log masuk

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);
Salin selepas log masuk

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan