Maison >développement back-end >Problème PHP >Comment implémenter JWT en utilisant PHP

Comment implémenter JWT en utilisant PHP

PHPz
PHPzoriginal
2023-04-24 10:50:102796parcourir

JWT (JSON Web Tokens) est un standard ouvert basé sur JSON pour transmettre en toute sécurité des informations entre deux applications. Il se compose de 3 parties : en-tête, charge utile et signature. L'en-tête contient des métadonnées sur le jeton, la charge utile est la partie qui stocke réellement les informations et la signature est utilisée pour vérifier l'intégrité du message.

Dans cet article, nous explorerons comment implémenter JWT en utilisant PHP.

  1. Dépendances d'installation

JWT doit être installé via Composer. Si vous n'avez pas installé Composer, vous pouvez l'installer avec la commande suivante :

curl -sS https://getcomposer.org/installer | php

Déplacez ensuite le fichier exécutable Composer dans le répertoire /usr/local/bin :

sudo mv composer.phar /usr/local/bin/composer

Dépendances d'installation :

composer require firebase/php-jwt
  1. Create Token

Tout d'abord, nous devons créer un jeton en utilisant la fonction jwt_encode() de PHP. Voici un exemple : jwt_encode()函数创建一个Token。下面是一个示例:

use \Firebase\JWT\JWT;

$key = "my_secret_key"; //密钥
$payload = array(
    "iss" => "localhost",
    "aud" => "localhost",
    "iat" => time(),
    "exp" => time()+60*60 //有效期1小时
);

$jwt = JWT::encode($payload, $key);

在上述例子中,我们使用jwt_encode()函数来创建一个JWT。$key变量包含着JWT的密钥,$payload变量包含了需要传输的信息和过期时间。过期时间可以使用PHP的time()函数获取。最后,jwt_encode()函数会返回一个JWT字符串。

  1. 验证Token

我们需要使用PHP的jwt_decode()函数来验证JWT。下面是一个示例:

use \Firebase\JWT\JWT;

$key = "my_secret_key"; //密钥
$jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJsb2NhbGhvc3QiLCJhdWQiOiJsb2NhbGhvc3QiLCJpYXQiOjE1NTg2NTQ2OTksImV4cCI6MTU1ODY5MTg5OSwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSIsIm5hbWUiOiJhZG1pbiJ9.AmifgOPkE8lx4m4ovHShBc1sPLs9QnNgzuiBZfrjtLw";

try {
    $decoded = JWT::decode($jwt, $key, array('HS256'));
    print_r($decoded);
} catch (Exception $e) {
    echo 'Invalid token: ' . $e->getMessage();
}

在上述例子中,我们使用了jwt_decode()函数来验证JWT。如果验证通过,函数将返回一个包含了JWT的信息的对象。

  1. 验证签名

签名用于验证JWT的完整性。我们需要使用一个密钥来对消息进行签名,这个密钥只有签名验证机制才知道。当接收者接收到消息时,他将使用相同的密钥对这个消息进行解密和验证。

JWT使用了一种叫做“哈希消息认证码”(HMAC)的技术来对JWT进行签名。这个技术需要将JWT的Header和Payload进行哈希计算,然后再与密钥进行组合。接下来是签名验证的例子:

use \Firebase\JWT\JWT;

$key = "my_secret_key"; //密钥
$jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJsb2NhbGhvc3QiLCJhdWQiOiJsb2NhbGhvc3QiLCJpYXQiOjE1NTg2NTQ2OTksImV4cCI6MTU1ODY5MTg5OSwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSIsIm5hbWUiOiJhZG1pbiJ9.AmifgOPkE8lx4m4ovHShBc1sPLs9QnNgzuiBZfrjtLw";

try {
    $decoded = JWT::decode($jwt, $key, array('HS256'));
    $decoded_array = (array) $decoded;
    $signature_valid = JWT::verify("$jwt->header.$jwt->payload", $jwt->signature, $key);

    if ($signature_valid) {
        echo "Valid signature";
    } else {
        echo "Invalid signature";
    }
} catch (Exception $e) {
    echo 'Invalid token: ' . $e->getMessage();
}

在上述例子中,我们使用了verify()函数来验证签名。这个函数将会返回一个布尔值,如果结果为true,表示签名是有效的。

总结

在这篇文章中,我们简要地介绍了如何使用PHP实现JWT。首先,我们需要安装JWT的依赖库,然后使用jwt_encode()函数创建Token,使用jwt_decode()函数验证Token,最后使用verify()rrreee

Dans l'exemple ci-dessus, nous utilisons la fonction jwt_encode() pour créer un JWT. La variable $key contient la clé JWT, et la variable $payload contient les informations à transmettre et l'heure d'expiration. Le délai d'expiration peut être obtenu à l'aide de la fonction time() de PHP. Enfin, la fonction jwt_encode() renvoie une chaîne JWT. 🎜
    🎜Verify Token🎜🎜🎜Nous devons utiliser la fonction jwt_decode() de PHP pour vérifier le JWT. Voici un exemple : 🎜rrreee🎜Dans l'exemple ci-dessus, nous avons utilisé la fonction jwt_decode() pour vérifier le JWT. Si la vérification réussit, la fonction renverra un objet contenant les informations JWT. 🎜
      🎜Verify Signature🎜🎜🎜La signature est utilisée pour vérifier l'intégrité du JWT. Nous devons signer le message à l'aide d'une clé connue uniquement du mécanisme de vérification de signature. Lorsque le destinataire recevra le message, il utilisera la même clé pour décrypter et vérifier le message. 🎜🎜JWT utilise une technologie appelée « Hash Message Authentication Code » (HMAC) pour signer le JWT. Cette technologie nécessite de hacher l'en-tête et la charge utile JWT, puis de les combiner avec la clé. Voici ensuite un exemple de vérification de signature : 🎜rrreee🎜Dans l'exemple ci-dessus, nous avons utilisé la fonction verify() pour vérifier la signature. Cette fonction renverra une valeur booléenne Si le résultat est vrai, cela signifie que la signature est valide. 🎜🎜Résumé🎜🎜Dans cet article, nous avons brièvement présenté comment implémenter JWT à l'aide de PHP. Tout d'abord, nous devons installer la bibliothèque dépendante de JWT, puis utiliser la fonction jwt_encode() pour créer le jeton, utiliser la fonction jwt_decode() pour vérifier le jeton, et enfin utilisez verify()La fonction vérifie la signature. Ces fonctions peuvent être implémentées via la bibliothèque JWT de Firebase. 🎜

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