Maison  >  Article  >  développement back-end  >  Utilisez la liste noire JWT (JSON Web Token) pour implémenter la vérification de sécurité PHP

Utilisez la liste noire JWT (JSON Web Token) pour implémenter la vérification de sécurité PHP

WBOY
WBOYoriginal
2023-07-24 19:21:311624parcourir

Utilisez la liste noire JWT (JSON Web Token) pour implémenter la vérification de sécurité PHP

Avec le développement d'Internet, la sécurité des applications Web est devenue de plus en plus importante. Lors de la mise en œuvre de la vérification de sécurité pour les applications PHP, nous pouvons utiliser JWT (JSON Web Token) comme solution de vérification de sécurité. Afin d'augmenter la sécurité de JWT, nous pouvons utiliser la liste noire pour gérer les jetons expirés.

JWT est un standard ouvert (RFC 7519) pour l'authentification et l'autorisation. Il se compose de trois parties : en-tête, charge utile et signature. L'en-tête contient des informations sur l'algorithme et le type de jeton, la charge utile contient des informations sur les données utilisateur et la signature est générée en fonction des signatures d'en-tête, de charge utile et de clé secrète.

Le processus d'authentification à l'aide de JWT est le suivant :

  1. L'utilisateur se connecte à l'aide d'un nom d'utilisateur et d'un mot de passe.
  2. Le serveur vérifie le nom d'utilisateur et le mot de passe de l'utilisateur et génère un JWT.
  3. Le serveur envoie le JWT au client.
  4. Le client stocke le JWT dans Cookie ou Local Storage.
  5. Lorsque le client envoie une requête, il amène JWT dans l'en-tête de la requête.
  6. Après avoir reçu la demande, le serveur vérifie la validité du JWT. Si la vérification réussit, il continue de traiter la demande.

Cependant, si le JWT est valide pendant une longue période, une fois le Token divulgué, l'attaquant peut toujours utiliser le Token pour effectuer des opérations illégales. Afin de résoudre ce problème, nous pouvons utiliser la liste noire pour gérer les jetons expirés. Lorsque l'utilisateur se déconnecte ou modifie son mot de passe, les jetons concernés seront ajoutés à la liste noire.

Ce qui suit est un exemple de code pour utiliser JWT Blacklist pour implémenter la vérification de sécurité 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 是否存在
}

En utilisant l'exemple de code ci-dessus, nous pouvons facilement implémenter la vérification de sécurité JWT et la gestion de liste noire dans les applications PHP. En utilisant JWT et Blacklist, nous pouvons augmenter la sécurité de l'authentification et améliorer la protection des applications Web.

Résumé :
Cet article explique comment utiliser JWT et Blacklist pour implémenter la vérification de sécurité PHP. Grâce à JWT, nous pouvons transmettre en toute sécurité les informations des utilisateurs et utiliser la liste noire pour gérer les jetons expirés, augmentant ainsi la sécurité de l'authentification. Dans le développement réel, nous pouvons optimiser et étendre le code en fonction des besoins réels pour répondre aux exigences de sécurité dans des scénarios spécifiques.

Liens de référence :
[1] JSON Web Token (JWT) - https://jwt.io/
[2] RFC 7519 - https://tools.ietf.org/html/rfc7519

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn