JWT (Token Web JSON) ialah standard terbuka berdasarkan JSON untuk menghantar maklumat dengan selamat antara dua aplikasi. Ia terdiri daripada 3 bahagian: Pengepala, Muatan dan Tandatangan. Pengepala mengandungi metadata tentang Token, Muatan ialah bahagian yang sebenarnya menyimpan maklumat, dan Tandatangan digunakan untuk mengesahkan integriti mesej.
Dalam artikel ini, kami akan meneroka cara melaksanakan JWT menggunakan PHP.
JWT perlu dipasang melalui Komposer. Jika anda belum memasang Composer, anda boleh memasangnya dengan arahan berikut:
curl -sS https://getcomposer.org/installer | php
Kemudian alihkan fail boleh laku Composer ke direktori /usr/local/bin:
sudo mv composer.phar /usr/local/bin/composer
Pasang kebergantungan:
composer require firebase/php-jwt
Pertama, kita perlu mencipta Token menggunakan fungsi jwt_encode()
PHP. Berikut ialah contoh:
use \Firebase\JWT\JWT; $key = "my_secret_key"; //密钥 $payload = array( "iss" => "localhost", "aud" => "localhost", "iat" => time(), "exp" => time()+60*60 //有效期1小时 ); $jwt = JWT::encode($payload, $key);
Dalam contoh di atas, kami menggunakan fungsi jwt_encode()
untuk mencipta JWT. Pembolehubah $key
mengandungi kunci JWT, dan pembolehubah $payload
mengandungi maklumat yang akan dihantar dan masa tamat tempoh. Masa tamat tempoh boleh diperoleh menggunakan fungsi time()
PHP. Akhirnya, fungsi jwt_encode()
mengembalikan rentetan JWT.
Kita perlu menggunakan fungsi jwt_decode()
PHP untuk mengesahkan JWT. Berikut ialah contoh:
use \Firebase\JWT\JWT; $key = "my_secret_key"; //密钥 $jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJsb2NhbGhvc3QiLCJhdWQiOiJsb2NhbGhvc3QiLCJpYXQiOjE1NTg2NTQ2OTksImV4cCI6MTU1ODY5MTg5OSwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSIsIm5hbWUiOiJhZG1pbiJ9.AmifgOPkE8lx4m4ovHShBc1sPLs9QnNgzuiBZfrjtLw"; try { $decoded = JWT::decode($jwt, $key, array('HS256')); print_r($decoded); } catch (Exception $e) { echo 'Invalid token: ' . $e->getMessage(); }
Dalam contoh di atas, kami menggunakan fungsi jwt_decode()
untuk mengesahkan JWT. Jika pengesahan berjaya, fungsi akan mengembalikan objek yang mengandungi maklumat JWT.
Tandatangan digunakan untuk mengesahkan integriti JWT. Kami perlu menggunakan kunci untuk menandatangani mesej, yang hanya diketahui oleh mekanisme pengesahan tandatangan. Apabila penerima menerima mesej, dia akan menggunakan kunci yang sama untuk menyahsulit dan mengesahkan mesej.
JWT menggunakan teknologi yang dipanggil "Kod Pengesahan Mesej Hash" (HMAC) untuk menandatangani JWT. Teknologi ini memerlukan pencincangan Pengepala JWT dan Muatan dan kemudian menggabungkannya dengan kunci. Seterusnya ialah contoh pengesahan tandatangan:
use \Firebase\JWT\JWT; $key = "my_secret_key"; //密钥 $jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJsb2NhbGhvc3QiLCJhdWQiOiJsb2NhbGhvc3QiLCJpYXQiOjE1NTg2NTQ2OTksImV4cCI6MTU1ODY5MTg5OSwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSIsIm5hbWUiOiJhZG1pbiJ9.AmifgOPkE8lx4m4ovHShBc1sPLs9QnNgzuiBZfrjtLw"; try { $decoded = JWT::decode($jwt, $key, array('HS256')); $decoded_array = (array) $decoded; $signature_valid = JWT::verify("$jwt->header.$jwt->payload", $jwt->signature, $key); if ($signature_valid) { echo "Valid signature"; } else { echo "Invalid signature"; } } catch (Exception $e) { echo 'Invalid token: ' . $e->getMessage(); }
Dalam contoh di atas, kami menggunakan fungsi verify()
untuk mengesahkan tandatangan. Fungsi ini akan mengembalikan nilai Boolean Jika hasilnya benar, ini bermakna tandatangan itu sah.
Ringkasan
Dalam artikel ini, kami memperkenalkan secara ringkas cara melaksanakan JWT menggunakan PHP. Mula-mula, kita perlu memasang perpustakaan bergantung JWT, kemudian gunakan fungsi jwt_encode()
untuk mencipta Token, gunakan fungsi jwt_decode()
untuk mengesahkan Token, dan akhirnya gunakan fungsi verify()
untuk mengesahkan tandatangan. Fungsi ini boleh dilaksanakan melalui perpustakaan JWT Firebase.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan JWT menggunakan PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!