Dalam pembangunan web, salah satu keperluan yang paling biasa ialah pengesahan pengguna. Untuk melaksanakan pengesahan selamat, pembangun web boleh bergantung pada banyak mekanisme yang berbeza. Satu kaedah popular ialah JSON Web Token (JWT), yang menyediakan kaedah pengesahan berasaskan token.
Dalam artikel ini, kami akan memperkenalkan konsep asas JWT dan kemudian menunjukkan cara menggunakan JWT untuk pengesahan dalam PHP. Kami akan menggunakan API contoh mudah untuk menggambarkan.
JWT ialah standard terbuka (RFC 7519) yang mentakrifkan protokol token berdasarkan format JSON untuk menghantar maklumat antara pelayan dan pelanggan. JWT terdiri daripada tiga bahagian: pengepala, muatan dan tandatangan.
Pengepala mengandungi metadata tentang token, seperti jenis token dan algoritma tandatangan. Muatan mengandungi data yang akan dipindahkan. Penghantaran JWT adalah melalui pengekodan Base64. Bahagian tandatangan adalah untuk menandatangani nilai cincang pengepala dan muatan.
Dalam aplikasi sebenar, kami biasanya menjana JWT selepas pengguna berjaya log masuk dan kemudian menghantarnya semula kepada pelanggan. Setiap kali pelanggan mengakses API yang dilindungi, ia perlu menghantar JWT ke pelayan sebagai maklumat pengesahan. Pelayan boleh mengesahkan kesahihan JWT dan mengesahkan pengguna berdasarkannya.
Mari kita tunjukkan cara menggunakan JWT untuk pengesahan dalam PHP. Dalam contoh ini, kami akan mencipta API mudah untuk mengesahkan JWT. API akan menerima permintaan GET dan lulus JWT sebagai parameter pertanyaan.
Pertama, kita perlu memasang perpustakaan php-jwt. Kita boleh menggunakan Komposer untuk melengkapkan import:
composer require firebase/php-jwt
Kemudian, kita perlu menulis fungsi untuk menukar data muatan kepada JWT dan menandatanganinya:
function generateToken($payload) { $key = "secret_key"; $token = array( "iss" => "http://example.org", "aud" => "http://example.com", "iat" => time(), "exp" => time() + (60*60), "data" => $payload ); return JWT::encode($token, $key); }
Dalam fungsi ini, kami menetapkan beberapa metadata asas, seperti "iss" ( pengeluar), "aud" (penerima), "iat" (masa terbitan) dan "exp" (masa tamat tempoh). Kami juga menambah data pengguna pada bahagian data JWT. Akhir sekali, kami menandatangani JWT menggunakan kaedah pengekodan pustaka PHP-JWT, menggunakan "secret_key" sebagai kunci tandatangan.
Seterusnya, kita perlu menulis fungsi pengesahan untuk menyemak sama ada JWT yang masuk adalah sah:
function validateToken($jwt) { $key = "secret_key"; try { $data = JWT::decode($jwt, $key, array('HS256')); return true; } catch (Exception $e) { return false; } }
Dalam fungsi ini, kita menyahkod JWT menggunakan kaedah penyahkod perpustakaan PHP-JWT dan mengesahkannya menggunakan kekunci yang sama. Mengembalikan benar jika pengesahan JWT lulus, palsu sebaliknya.
Akhir sekali, kita perlu menulis skrip kemasukan untuk menerima permintaan GET dan mengesahkan JWT:
require_once 'vendor/autoload.php'; use FirebaseJWTJWT; $jwt = $_GET['jwt']; if (validateToken($jwt)) { $data = JWT::decode($jwt, "secret_key", array('HS256')); echo "Welcome " . $data->data->username . "!"; } else { echo "Invalid token!"; }
Dalam skrip ini, kita mula-mula mendapatkan JWT daripada parameter permintaan GET, dan kemudian memanggil fungsi validateToken untuk mengesahkan sama ada JWT adalah sah. Jika JWT itu sah, kami boleh menyahkodnya, mengekstrak maklumat pengguna yang disimpan daripadanya dan mengalu-alukan pengguna. Jika tidak, kami akan mengeluarkan "Token tidak sah!".
Kod lengkap adalah seperti berikut:
require_once 'vendor/autoload.php'; use FirebaseJWTJWT; function generateToken($payload) { $key = "secret_key"; $token = array( "iss" => "http://example.org", "aud" => "http://example.com", "iat" => time(), "exp" => time() + (60*60), "data" => $payload ); return JWT::encode($token, $key); } function validateToken($jwt) { $key = "secret_key"; try { $data = JWT::decode($jwt, $key, array('HS256')); return true; } catch (Exception $e) { return false; } } $jwt = $_GET['jwt']; if (validateToken($jwt)) { $data = JWT::decode($jwt, "secret_key", array('HS256')); echo "Welcome " . $data->data->username . "!"; } else { echo "Invalid token!"; }
Artikel ini menerangkan cara menggunakan JWT untuk pengesahan dalam PHP. Kami menunjukkan JWT berdasarkan API mudah, memperincikan cara menjana dan mengesahkan JWT.
Perkara utama menggunakan JWT untuk pengesahan adalah untuk menetapkan metadata JWT dengan betul dan menggunakan algoritma tandatangan yang betul. Selain itu, JWT hendaklah sentiasa ditandatangani menggunakan kunci selamat.
Oleh itu, semasa membangunkan aplikasi, anda harus mempertimbangkan dengan teliti cara menggunakan JWT untuk memastikan aplikasi anda selamat.
Atas ialah kandungan terperinci Bagaimana untuk mengesahkan dalam antara muka API PHP menggunakan JWT. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!