Rumah  >  Artikel  >  rangka kerja php  >  Cara menggunakan ThinkPHP6 untuk melaksanakan pengesahan OAuth2

Cara menggunakan ThinkPHP6 untuk melaksanakan pengesahan OAuth2

王林
王林asal
2023-06-21 08:01:241336semak imbas

Dalam aplikasi web, pengesahan OAuth2 telah menjadi standard popular, membenarkan pengguna menggunakan pelayan kebenaran untuk membolehkan aplikasi pihak ketiga mengakses dan mengendalikan sumber dilindungi mereka. ThinkPHP6 ialah rangka kerja PHP yang pantas dan moden sesuai untuk semua jenis aplikasi Ia menyediakan alatan yang mudah digunakan dan berkuasa untuk melaksanakan pengesahan OAuth2. Dalam artikel ini, kami akan meneroka cara melaksanakan pengesahan OAuth2 menggunakan ThinkPHP6.

Langkah 1: Pasang ThinkPHP6

Untuk mula menggunakan ThinkPHP6, anda mesti memasang Komposer dalam persekitaran setempat anda terlebih dahulu. Buka tetingkap terminal atau baris arahan dalam direktori projek anda dan laksanakan arahan berikut:

composer create-project topthink/think oauth2

Ini akan mencipta direktori baharu yang dipanggil oauth2 dalam direktori projek anda dan memasang semua komponen ThinkPHP6 yang diperlukan.

Langkah 2: Pasang PHP-JWT

Pengesahan ThinkPHP6 OAuth2 bergantung pada PHP-JWT, iaitu perpustakaan PHP untuk menjana dan mengesahkan JSON Web Token (JWT). Sebelum itu, kita harus memasang perpustakaan PHP-JWT terlebih dahulu. Dalam tetingkap terminal atau baris arahan, laksanakan arahan berikut:

composer require firebase/php-jwt

Langkah 3: Buat pembekal perkhidmatan OAuth2

Pembekal perkhidmatan OAuth2 membenarkan aplikasi pihak ketiga mengakses kawasan yang dilindungi melalui sumber kebenaran . Dalam ThinkPHP6, pembekal perkhidmatan OAuth2 dilaksanakan berdasarkan kelas abstrak thinkoauthproviderAbstractProvider. Kami perlu mencipta pembekal perkhidmatan OAuth2 dan melaksanakan kaedah berikut:

  • getClientId(): Mengembalikan ID klien OAuth2
  • getClientSecret(): Mengembalikan rahsia pelanggan OAuth2
  • getAuthorizationUrl(): Mengembalikan URL kebenaran
  • validateAuthorizationCode(): Mengesahkan kod kebenaran
  • refreshToken(): Menyegarkan token akses

Yang berikut ialah contoh pembekal perkhidmatan OAuth2 yang ringkas:

<?php

namespace appoauthprovider;

use FirebaseJWTJWT;
use thinkoauthproviderAbstractProvider;

class SampleProvider extends AbstractProvider
{
    public function getClientId(): string
    {
        return 'YOUR_CLIENT_ID';
    }

    public function getClientSecret(): string
    {
        return 'YOUR_CLIENT_SECRET';
    }

    public function getAuthorizationUrl(): string
    {
        $authUrl = 'https://your.auth.server/auth?' .
            'client_id=' . $this->getClientId() .
            '&redirect_uri=' . urlencode($this->getRedirectUri()) .
            '&response_type=code';

        return $authUrl;
    }

    public function validateAuthorizationCode(string $code): ?array
    {
        $payload = JWT::decode($code, $this->getClientSecret(), array('HS256'));

        // Check if payload is valid

        return $payload;
    }

    public function refreshToken(string $refreshToken): ?array
    {
        // Implement refresh token logic

        return null;
    }
}

Langkah 4: Laksanakan perisian tengah pengesahan OAuth2

Kini, kita perlu melaksanakan perisian tengah pengesahan OAuth2 dalam aplikasi. Dalam ThinkPHP6, middleware dilaksanakan berdasarkan kelas abstrak thinkmiddlewareMiddleware dan thinksessionSessionManager. Kita perlu mencipta middleware dan melaksanakan kaedah berikut:

  • handle(hinkRequest $request, Closure $next): mengendalikan permintaan HTTP

Berikut ialah pengesahan OAuth2 yang mudah Contoh perisian tengah:

<?php

namespace appmiddleware;

use appoauthproviderSampleProvider;
use FirebaseJWTJWT;

class OAuth2Middleware
{
    public function handle(    hinkRequest $request, Closure $next)
    {
        $provider = new SampleProvider();

        // Check if access token exists

        $accessToken = $request->header('Authorization');

        if (!$accessToken) {
            // Redirect to auth server

            $authUrl = $provider->getAuthorizationUrl();
            return redirect($authUrl);
        }

        // Verify access token

        $jwtSecret = $provider->getClientSecret();
        $verify = JWT::decode($accessToken, $jwtSecret, array('HS256'));

        // Check if token is valid

        if (!$verify) {
            return json(array(
                'error' => 'Invalid token',
            ));
        }

        // Set user in session

        $session =     hinkacadeSession::get('user');
        $session['id'] = $verify['id'];
            hinkacadeSession::set('user', $session);

        // Go to next middleware

        return $next($request);
    }
}

Logik pelaksanaan perisian tengah di atas adalah seperti berikut:

  • Mula-mula, nyatakan pembekal perkhidmatan OAuth2.
  • Semak sama ada token akses hadir dalam permintaan HTTP.
  • Jika tidak hadir, ubah hala pengguna ke pelayan kebenaran OAuth2 untuk mendapatkan token akses.
  • Jika ada, semak sama ada token akses itu sah.
  • Jika token tidak sah, kembalikan respons ralat.
  • Jika token itu sah, log sesi pengguna ke aplikasi dan teruskan ke middleware seterusnya.

Langkah 5: Daftar perisian tengah pengesahan OAuth2

Sekarang, kita perlu mendaftarkan perisian tengah pengesahan OAuth2 sebagai perisian tengah global dalam aplikasi. Dalam fail configmiddleware.php, tambahkan kod berikut:

<?php

return [
    'oauth2' => ppmiddlewareOAuth2Middleware::class,
];

Kini, kami telah menyelesaikan semua langkah untuk melaksanakan pengesahan OAuth2 menggunakan ThinkPHP6. Anda boleh menggunakan perisian tengah pengesahan OAuth2 dalam aplikasi anda untuk melindungi laluan atau tindakan pengawal yang memerlukan akses kepada sumber yang dibenarkan. Dengan perisian tengah pengesahan OAuth2, anda boleh menggunakan mekanisme kebenaran berasaskan token untuk melindungi data pengguna dan titik akhir API yang sensitif. Manfaatkan kemudahan penggunaan dan prestasi berkuasa yang disediakan oleh ThinkPHP6 untuk membangunkan aplikasi web yang selamat dan berprestasi tinggi.

Atas ialah kandungan terperinci Cara menggunakan ThinkPHP6 untuk melaksanakan pengesahan OAuth2. 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