Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan JWT untuk pengesahan API dalam PHP

Cara menggunakan JWT untuk pengesahan API dalam PHP

PHPz
PHPzasal
2023-06-17 22:04:281181semak imbas

Dengan pembangunan aplikasi web, pengesahan API telah menjadi bahagian penting dalam aplikasi web moden. Token Web JSON (JWT) ialah standard terbuka untuk pengesahan dan kebenaran yang menyediakan cara yang selamat dan boleh dipercayai untuk mengesahkan pengguna dan melaksanakan log masuk tunggal. Artikel ini akan menerangkan cara menggunakan JWT untuk pengesahan API dalam PHP.

Apakah itu JWT?

JSON Web Token (JWT) ialah standard berdasarkan format JSON, yang boleh digunakan untuk menghantar maklumat dengan selamat melalui Internet. JWT biasanya terdiri daripada tiga bahagian: pengepala, muatan dan tandatangan.

  • Pengepala: Mengandungi algoritma yang digunakan oleh JWT, seperti HMAC SHA256 atau RSA.
  • Muat bayar: Mengandungi data tentang pengguna, kebenaran atau maklumat lain yang berkaitan.
  • Tandatangan: digunakan untuk mengesahkan ketulenan dan integriti Token.

Aliran kerja JWT

Apabila pengguna log masuk, pelayan akan memberikan JWT kepada pengguna. JWT ini akan dihantar kepada pelanggan dan disimpan dalam kuki pelanggan atau storan setempat. Apabila pengguna ingin mengakses API yang dilindungi, pelanggan menghantar JWT kembali ke pelayan. Pelayan akan menyemak tandatangan JWT dan mengesahkan data dalam muatan untuk memastikan pengguna mempunyai kebenaran untuk mengakses API. Jika JWT lulus pengesahan, pelayan membenarkan pengguna untuk mengakses API.

Menggunakan PHP untuk melaksanakan pengesahan JWT

Dalam PHP, kita boleh menggunakan beberapa perpustakaan sumber terbuka yang popular untuk melaksanakan pengesahan JWT. Artikel ini akan menggunakan pustaka JWT Firebase, yang menyediakan API mudah untuk mencipta dan mengesahkan JWT. Berikut ialah contoh mudah:

  1. Pasang pustaka Firebase JWT:

komposer memerlukan firebase/php-jwt

  1. Buat JWT:

Kod berikut akan mencipta JWT yang mengandungi tandatangan dan data muatan tersuai.

use FirebaseJWTJWT;

// Set the payload data (custom data)
$payload = [
    "user_id" => 1,
    "username" => "john.doe",
];
 
// Generate JWT using secret key
$jwt = JWT::encode($payload, 'secret_key');
  1. Sahkan JWT:

Kod di bawah akan mengesahkan tandatangan JWT dan menyemak sama ada data muatan adalah sah.

use FirebaseJWTJWT;

// Verify JWT using secret key
try {
    $decoded = JWT::decode($jwt, 'secret_key', array('HS256'));
} catch (Exception $e) {
    // Handle invalid JWT
}
 
// Access the payload data
$user_id = $decoded->user_id;
$username = $decoded->username;
  1. Hantar JWT kepada pelanggan:

Selepas mencipta JWT, kami boleh menghantarnya kepada pelanggan dan menyimpannya dalam kuki atau storan setempat.

// Set JWT as a cookie
setcookie('token', $jwt, time()+3600, '/');
  1. Sahkan JWT yang dihantar oleh klien:

Kami boleh menggunakan kod yang sama seperti pada bahagian pelayan untuk mengesahkan JWT yang dihantar oleh klien.

use FirebaseJWTJWT;

// Get JWT from cookie or local storage
$jwt = $_COOKIE['token'];
 
// Verify JWT using secret key
try {
    $decoded = JWT::decode($jwt, 'secret_key', array('HS256'));
} catch (Exception $e) {
    // Handle invalid JWT
}
 
// Access the payload data
$user_id = $decoded->user_id;
$username = $decoded->username;

Ringkasan

JWT ialah mekanisme pengesahan yang selamat dan boleh dipercayai untuk aplikasi web moden. Pengesahan JWT boleh dilaksanakan dengan mudah menggunakan PHP dan perpustakaan JWT Firebase. Apabila melaksanakan pengesahan API, pastikan anda hanya menyimpan JWT di tempat yang selamat dan menggunakan HTTPS untuk penghantaran yang dilindungi.

Atas ialah kandungan terperinci Cara menggunakan JWT untuk pengesahan API dalam PHP. 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