Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Gunakan Senarai Hitam JWT (Token Web JSON) untuk melaksanakan pengesahan keselamatan PHP

Gunakan Senarai Hitam JWT (Token Web JSON) untuk melaksanakan pengesahan keselamatan PHP

WBOY
WBOYasal
2023-07-24 19:21:311624semak imbas

Gunakan Senarai Hitam JWT (JSON Web Token) untuk melaksanakan pengesahan keselamatan PHP

Dengan perkembangan Internet, keselamatan aplikasi web menjadi semakin penting. Apabila melaksanakan pengesahan keselamatan untuk aplikasi PHP, kami boleh menggunakan JWT (JSON Web Token) sebagai penyelesaian pengesahan keselamatan. Untuk meningkatkan keselamatan JWT, kami boleh menggunakan Senarai Hitam untuk mengurus Token yang telah tamat tempoh.

JWT ialah standard terbuka (RFC 7519) untuk pengesahan dan kebenaran. Ia terdiri daripada tiga bahagian: Pengepala, Muatan dan Tandatangan. Pengepala mengandungi maklumat jenis algoritma dan Token, Muatan mengandungi maklumat data pengguna, dan Tandatangan dijana berdasarkan tandatangan Pengepala, Muatan dan Kunci Rahsia.

Proses untuk pengesahan menggunakan JWT adalah seperti berikut:

  1. Pengguna log masuk menggunakan nama pengguna dan kata laluan.
  2. Pelayan mengesahkan nama pengguna dan kata laluan pengguna dan menjana JWT.
  3. Pelayan menghantar JWT kepada pelanggan.
  4. Pelanggan menyimpan JWT dalam Kuki atau Storan Tempatan.
  5. Apabila pelanggan menghantar permintaan, ia membawa JWT dalam tajuk permintaan.
  6. Selepas menerima permintaan, pelayan mengesahkan kesahihan JWT Jika pengesahan lulus, ia terus memproses permintaan.

Namun, jika JWT sah untuk jangka masa yang lama, setelah Token bocor, penyerang sentiasa boleh menggunakan Token untuk melakukan operasi yang menyalahi undang-undang. Untuk menyelesaikan masalah ini, kami boleh menggunakan Senarai Hitam untuk mengurus Token yang telah tamat tempoh Apabila pengguna log keluar atau menukar kata laluan mereka, Token yang berkaitan akan ditambahkan ke Senarai Hitam.

Berikut ialah contoh kod untuk menggunakan JWT Blacklist untuk melaksanakan pengesahan keselamatan PHP:

// 定义 JWT 的 Secret Key
$secretKey = "your_secret_key";

// 生成 JWT
function generateJWT($userId) {
    global $secretKey;

    $header = json_encode(['typ' => 'JWT', 'alg' => 'HS256']);
    $payload = json_encode(['userId' => $userId]);

    $base64UrlHeader = base64UrlEncode($header);
    $base64UrlPayload = base64UrlEncode($payload);

    $signature = hash_hmac('sha256', $base64UrlHeader . "." . $base64UrlPayload, $secretKey, true);
    $base64UrlSignature = base64UrlEncode($signature);

    return $base64UrlHeader . "." . $base64UrlPayload . "." . $base64UrlSignature;
}

// 验证 JWT 是否有效
function validateJWT($jwt) {
    global $secretKey;

    list($base64UrlHeader, $base64UrlPayload, $base64UrlSignature) = explode('.', $jwt);

    $signature = base64UrlDecode($base64UrlSignature);
    $expectedSignature = hash_hmac('sha256', $base64UrlHeader . "." . $base64UrlPayload, $secretKey, true);

    if ($signature !== $expectedSignature) {
        return false;
    }

    $payload = json_decode(base64UrlDecode($base64UrlPayload), true);

    // 在 Blacklist 中查找当前 Token 是否存在
    if (isTokenBlacklisted($jwt)) {
        return false;
    }

    return $payload['userId'];
}

// 将字符串进行 Base64Url 编码
function base64UrlEncode($data) {
    $base64 = base64_encode($data);
    if ($base64 === false) {
        return false;
    }

    // 替换特殊字符
    $base64Url = strtr($base64, '+/', '-_');

    // 删除 = 字符
    $base64Url = rtrim($base64Url, '=');

    return $base64Url;
}

// 将 Base64Url 编码的字符串解码
function base64UrlDecode($base64Url) {
    // 添加 = 字符
    $base64 = str_pad(strtr($base64Url, '-_', '+/'), strlen($base64Url) % 4, '=', STR_PAD_RIGHT);

    return base64_decode($base64);
}

// 将 Token 加入 Blacklist
function blacklistToken($jwt) {
    // 在数据库或缓存中将 Token 标记为失效
}

// 判断 Token 是否在 Blacklist 中
function isTokenBlacklisted($jwt) {
    // 在数据库或缓存中查询 Token 是否存在
}

Menggunakan contoh kod di atas, kami boleh melaksanakan pengesahan keselamatan JWT dan pengurusan Senarai Hitam dalam aplikasi PHP dengan mudah. Dengan menggunakan JWT dan Senarai Hitam, kami boleh meningkatkan keselamatan pengesahan dan meningkatkan perlindungan aplikasi web.

Ringkasan:
Artikel ini memperkenalkan cara menggunakan JWT dan Senarai Hitam untuk melaksanakan pengesahan keselamatan PHP. Melalui JWT, kami boleh menghantar maklumat pengguna dengan selamat, dan menggunakan Senarai Hitam untuk mengurus Token yang telah tamat tempoh, meningkatkan keselamatan pengesahan. Dalam pembangunan sebenar, kami boleh mengoptimumkan dan mengembangkan kod mengikut keperluan sebenar untuk memenuhi keperluan keselamatan dalam senario tertentu.

Pautan rujukan:
[1] Token Web JSON (JWT) - https://jwt.io/
[2] RFC 7519 - https://tools.ietf.org/html/rfc7519

Atas ialah kandungan terperinci Gunakan Senarai Hitam JWT (Token Web JSON) untuk melaksanakan pengesahan keselamatan 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