Maison  >  Article  >  développement back-end  >  Parlons de la façon d'utiliser JWT pour l'authentification d'identité en PHP

Parlons de la façon d'utiliser JWT pour l'authentification d'identité en PHP

PHPz
PHPzoriginal
2023-03-31 09:10:171092parcourir

JWT (JSON Web Token) est un standard ouvert d'authentification et d'autorisation. JWT se compose de trois parties, à savoir l'en-tête, la charge utile et la signature. Lors de l'utilisation de JWT, le serveur enverra un JWT au client, et le client portera le JWT dans les requêtes ultérieures. Le serveur confirmera la légitimité de la demande en vérifiant la signature et la période de validité du JWT.

PHP est un langage de développement Web couramment utilisé, qui fournit de nombreuses méthodes d'implémentation JWT. Ce qui suit explique comment utiliser JWT pour l'authentification d'identité en PHP.

  1. Installer JWT

Avant d'utiliser JWT, vous devez installer le package JWT de PHP. Il peut être installé via la commande suivante :

composer require firebase/php-jwt

Une fois l'installation terminée, JWT peut être introduit dans le projet :

require_once('vendor/autoload.php');
use Firebase\JWT\JWT;
  1. Générer JWT

Lors de l'authentification d'identité, le serveur doit générer un JWT et l'envoyer. au client. Le processus de génération de JWT comprend la génération de l'en-tête, de la charge utile et de la signature.

// 将需要编码的数据放到一个关联数组中
$payload = array(
    "user_id" => 123456,
);

// 生成Header
$header = array(
    "alg" => "HS256",  // 采用的加密算法
    "typ" => "JWT"
);

// 生成JWT
$jwt = JWT::encode($payload, SECRET_KEY, 'HS256');
// SECRET_KEY为加密密钥

Après avoir généré le JWT, envoyez-le simplement au client.

  1. Vérifier JWT

Dans les demandes ultérieures du client, le JWT doit être transporté et la légitimité de la demande doit être confirmée par la vérification du serveur. Le processus de vérification du serveur JWT comprend le décodage des trois parties : en-tête, charge utile et signature, ainsi que la vérification si la signature est correcte et si la période de validité a expiré.

// 解码JWT
$jwt_decoded = JWT::decode($jwt, SECRET_KEY, array('HS256'));

// 验证Signature和有效期
$jwt_verified = JWT::verify($jwt, SECRET_KEY, array('HS256'));

Si la signature et la durée de validité sont vérifiées, le traitement de la demande peut continuer. Si la vérification échoue, la demande doit être rejetée.

  1. Gestion de l'expiration du JWT

JWT a une période de validité et peut être utilisé pour plusieurs demandes pendant la période de validité. Après l'expiration, le client doit réobtenir le JWT et le mettre dans la demande. Lors du traitement d'un JWT, sa période de validité doit être vérifiée.

try {
    // 解码JWT
    $jwt_decoded = JWT::decode($jwt, SECRET_KEY, array('HS256'));
    // 检查有效期
    if ($jwt_decoded->exp < time()) {
        // JWT已过期
        throw new Exception('JWT已过期');
    }
} catch (Exception $e) {
    // JWT无效或已过期
    // 需要重新获取JWT或返回错误
}
  1. Résumé

Utiliser JWT pour l'authentification est une méthode simple et efficace. PHP fournit de nombreuses implémentations JWT, ce qui rend très facile l'utilisation de JWT en PHP. Cependant, vous devez faire attention à la période de validité du JWT ainsi qu’à son décodage et vérification corrects. Voici les étapes et les précautions à prendre pour utiliser PHP pour implémenter l'authentification JWT.

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