Bagaimana untuk mengesahkan dalam antara muka API PHP menggunakan JWT

PHPz
Lepaskan: 2024-01-22 11:40:02
asal
1194 orang telah melayarinya

PHP API接口:如何使用JWT进行身份验证

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.

  1. Apakah itu JWT?

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.

  1. Bagaimana untuk menggunakan JWT untuk pengesahan?

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
Salin selepas log masuk

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);
}
Salin selepas log masuk

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;
    }
}
Salin selepas log masuk

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!";
}
Salin selepas log masuk

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!";
}
Salin selepas log masuk
  1. Ringkasan

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!