Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan JWT menggunakan PHP

Bagaimana untuk melaksanakan JWT menggunakan PHP

PHPz
PHPzasal
2023-04-24 10:50:102754semak imbas

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.

  1. Kebergantungan pemasangan

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
  1. Buat Token

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.

  1. Sahkan Token

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.

  1. Sahkan tandatangan

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!

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