Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menggunakan PHP untuk pengesahan dan pengesahan JWT?

Bagaimana untuk menggunakan PHP untuk pengesahan dan pengesahan JWT?

WBOY
WBOYasal
2023-08-07 10:12:201277semak imbas

Bagaimana untuk menggunakan PHP untuk pengesahan dan pengesahan JWT?

JWT (JSON Web Token) ialah standard terbuka untuk pengesahan dan kebenaran. Ia memindahkan data antara pelanggan dan pelayan dengan cara yang selamat dan boleh dipercayai dan membolehkan pelayan mengesahkan identiti pengguna yang menghantar permintaan. Artikel ini akan memperkenalkan cara menggunakan PHP untuk melaksanakan fungsi pengesahan dan pengesahan JWT.

  1. Memasang perpustakaan bergantung
    JWT bergantung pada dua perpustakaan: Firebase PHP JWT dan lcobucci/jwt. Anda boleh menggunakan Komposer untuk memasang dua perpustakaan ini:
composer require firebase/php-jwt lcobucci/jwt
  1. Jana JWT
    Pertama, kita perlu menjana JWT selepas pengguna berjaya log masuk dan menghantarnya kepada pelanggan. Berikut ialah contoh kod:
<?php

use FirebaseJWTJWT;
use LcobucciJWTBuilder;
use LcobucciJWTSignerHmacSha256;

// 用户登录成功后,生成JWT
function generateJWT($userId, $secretKey) {
    $time = time();
    $token = (new Builder())
        ->issuedBy('example.com') // 发行者
        ->permittedFor('example.com') // 接受者
        ->identifiedBy('1', true) // 标识符
        ->issuedAt($time) // 发行时间
        ->expiresAt($time + 3600) // 过期时间
        ->withClaim('userId', $userId) // 自定义声明
        ->getToken(new Sha256(), new Key($secretKey));

    return $token;
}

$jwt = generateJWT(1, 'your-secret-key');
echo $jwt;
  1. Sahkan JWT
    Selepas pelayan menerima permintaan pelanggan, kami perlu mengesahkan kesahihan JWT dan mendapatkan maklumat identiti pengguna. Berikut ialah contoh kod:
<?php

use FirebaseJWTJWT;

// 验证并解析JWT
function verifyJWT($jwt, $secretKey) {
    try {
        $decoded = JWT::decode($jwt, $secretKey, ['HS256']);
        return $decoded;
    } catch (Exception $e) {
        return null;
    }
}

$jwt = $_SERVER['HTTP_AUTHORIZATION'];
$decoded = verifyJWT($jwt, 'your-secret-key');

if ($decoded) {
    $userId = $decoded->userId;
    echo "用户ID:$userId";
} else {
    echo "无效的JWT";
}
  1. Refresh JWT
    JWT tamat tempoh selepas beberapa ketika tetapi kami boleh menggunakan token muat semula untuk melanjutkan tempoh sah. Berikut ialah contoh kod:
<?php

use FirebaseJWTJWT;
use LcobucciJWTBuilder;
use LcobucciJWTSignerHmacSha256;

// 刷新JWT
function refreshJWT($jwt, $secretKey) {
    $current = time();
    $decoded = JWT::decode($jwt, $secretKey, ['HS256']);
    
    if ($decoded->exp - $current > 1800) { // 如果剩余有效期超过30分钟,则不刷新JWT
        return $jwt;
    }
    
    $newToken = (new Builder())
        ->issuedBy($decoded->iss)
        ->permittedFor($decoded->aud)
        ->identifiedBy($decoded->jti, true)
        ->issuedAt($current)
        ->expiresAt($current + 3600)
        ->withClaim('userId', $decoded->userId)
        ->getToken(new Sha256(), new Key($secretKey));
        
    return $newToken;
}

$jwt = $_SERVER['HTTP_AUTHORIZATION'];
$refreshedJWT = refreshJWT($jwt, 'your-secret-key');

echo $refreshedJWT;

Melalui langkah di atas, kita boleh melaksanakan fungsi pengesahan dan pengesahan JWT dengan mudah menggunakan PHP. Sudah tentu, aplikasi praktikal memerlukan lebih banyak pertimbangan dan amalan keselamatan, dan pelarasan berdasarkan keperluan khusus. Saya harap artikel ini akan membantu anda memahami dan menggunakan JWT!

Atas ialah kandungan terperinci Bagaimana untuk menggunakan PHP untuk pengesahan dan pengesahan JWT?. 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