JWT (JSON Web Token) ialah standard terbuka untuk pengesahan dan kebenaran. JWT terdiri daripada tiga bahagian iaitu Header, Payload dan Signature. Apabila menggunakan JWT, pelayan akan menghantar JWT kepada klien, dan klien akan membawa JWT dalam permintaan seterusnya Pelayan akan mengesahkan kesahihan permintaan dengan mengesahkan tandatangan dan tempoh sah JWT.
PHP ialah bahasa pembangunan web yang biasa digunakan, yang menyediakan banyak kaedah pelaksanaan JWT. Berikut akan memperkenalkan cara menggunakan JWT untuk pengesahan identiti dalam PHP.
Sebelum menggunakan JWT, anda perlu memasang pakej PHP JWT. Anda boleh memasangnya melalui arahan berikut:
composer require firebase/php-jwt
Selepas pemasangan selesai, anda boleh memperkenalkan JWT ke dalam projek:
require_once('vendor/autoload.php'); use Firebase\JWT\JWT;
Semasa pengesahan identiti, pelayan perlu menjana JWT dan menghantarnya kepada pelanggan. Proses menjana JWT termasuk menjana Header, Payload dan Tandatangan.
// 将需要编码的数据放到一个关联数组中 $payload = array( "user_id" => 123456, ); // 生成Header $header = array( "alg" => "HS256", // 采用的加密算法 "typ" => "JWT" ); // 生成JWT $jwt = JWT::encode($payload, SECRET_KEY, 'HS256'); // SECRET_KEY为加密密钥
Selepas menjana JWT, hantar sahaja kepada pelanggan.
Dalam permintaan seterusnya daripada pelanggan, JWT perlu dibawa dan disahkan oleh pelayan untuk mengesahkan kesahihan permintaan tersebut. Proses pelayan yang mengesahkan JWT termasuk menyahkod tiga bahagian Pengepala, Muatan dan Tandatangan, dan mengesahkan sama ada Tandatangan itu betul dan sama ada tempoh sah telah tamat.
// 解码JWT $jwt_decoded = JWT::decode($jwt, SECRET_KEY, array('HS256')); // 验证Signature和有效期 $jwt_verified = JWT::verify($jwt, SECRET_KEY, array('HS256'));
Jika kedua-dua Tandatangan dan tempoh sah disahkan, pemprosesan permintaan boleh diteruskan. Jika pengesahan tidak lulus, permintaan itu perlu ditolak.
JWT mempunyai tempoh sah dan boleh digunakan untuk berbilang permintaan semasa tempoh sah. Selepas tamat tempoh, pelanggan perlu mendapatkan semula JWT dan meletakkannya dalam permintaan. Apabila memproses JWT, tempoh sahnya perlu disemak.
try { // 解码JWT $jwt_decoded = JWT::decode($jwt, SECRET_KEY, array('HS256')); // 检查有效期 if ($jwt_decoded->exp < time()) { // JWT已过期 throw new Exception('JWT已过期'); } } catch (Exception $e) { // JWT无效或已过期 // 需要重新获取JWT或返回错误 }
Menggunakan JWT untuk pengesahan ialah kaedah yang mudah dan berkesan. PHP menyediakan banyak pelaksanaan JWT, menjadikannya sangat mudah untuk menggunakan JWT dalam PHP. Walau bagaimanapun, anda perlu memberi perhatian kepada tempoh sah JWT dan penyahkodan dan pengesahan yang betul. Di atas adalah langkah dan langkah berjaga-jaga untuk menggunakan PHP untuk melaksanakan pengesahan JWT.
Atas ialah kandungan terperinci Mari kita bincangkan tentang cara menggunakan JWT untuk pengesahan identiti dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!