JWT-Token in PHP: Vollständige Anleitung zur Bibliothek firebase/php-jwt
JSON Web Token (JWT) ist eine kompakte und sichere Methode zur Übertragung von Daten zwischen Client und Server im JSON-Format. In der modernen Webentwicklung wird JWT häufig zur Authentifizierung und Autorisierung von Benutzern sowie zum Austausch von Informationen zwischen verschiedenen Diensten verwendet. In PHP ist die beliebteste und zuverlässigste Bibliothek für die Arbeit mit JWT firebase/php-jwt.
Was ist JWT und wozu wird es benötigt?
JWT besteht aus drei Teilen, die durch Punkte getrennt sind:
- Header – der Header enthält Informationen über den Tokentyp und den Signaturalgorithmus.
- Payload – die Nutzlast mit Daten (z. B. Benutzer-ID, Rolle, Gültigkeitsdauer).
- Signature – die Signatur, die mit einem geheimen Schlüssel oder einem RSA/ECDSA-Schlüsselpaar erstellt wird.
Die wichtigsten Vorteile von JWT:
- Keine Notwendigkeit, Sitzungen auf dem Server zu speichern (zustandslos).
- Können beliebige Daten im JSON-Format enthalten.
- Unterstützen verschiedene Signaturalgorithmen: HS256, RS256, ES256 und andere.
- Sind aufgrund der kryptografischen Signatur fälschungssicher.
Installation der Bibliothek firebase/php-jwt
Verwenden Sie Composer, um die Bibliothek zu installieren. Öffnen Sie ein Terminal im Stammverzeichnis Ihres Projekts und führen Sie den folgenden Befehl aus:
composer require firebase/php-jwtNach der Installation binden Sie den Composer-Autoloader in Ihr PHP-Skript ein:
<?phprequire_once __DIR__ . '/vendor/autoload.php';
use Firebase\\JWT\\JWT;use Firebase\\JWT\\Key;?>Erstellung eines JWT-Tokens
Um ein Token zu erstellen, müssen Sie die Nutzlast (Payload) definieren und mit einem geheimen Schlüssel signieren. Beispiel für die Erstellung eines Tokens mit dem Algorithmus HS256:
<?php$key = 'your-secret-key-here'; // Geheimer Schlüssel (mindestens 32 Zeichen)$payload = [ 'iss' => 'pythonlib.ru', // Aussteller des Tokens 'sub' => '1234567890', // Betreff (z. B. Benutzer-ID) 'name' => 'Ivan Ivanov', 'role' => 'user', 'iat' => time(), // Erstellungszeitpunkt 'exp' => time() + 3600 // Gültigkeitsdauer (1 Stunde)];
$jwt = JWT::encode($payload, $key, 'HS256');echo "Erstelltes JWT-Token:" . $jwt;?>In diesem Beispiel legen wir die Standardfelder fest: iss (Aussteller), sub (Betreff), iat (Erstellungszeitpunkt) und exp (Gültigkeitsdauer). Sie können beliebige benutzerdefinierte Felder wie role oder email hinzufügen.
Dekodierung und Überprüfung eines JWT-Tokens
Beim Erhalt eines Tokens vom Client müssen Sie dessen Signatur und Gültigkeitsdauer überprüfen. Die Bibliothek überprüft automatisch den Algorithmus und die Gültigkeit der Signatur:
<?phptry { $decoded = JWT::decode($jwt, new Key($key, 'HS256')); print_r($decoded);} catch (\\Firebase\\JWT\\ExpiredException $e) { echo "Fehler: Token abgelaufen — " . $e->getMessage();} catch (\\Firebase\\JWT\\SignatureInvalidException $e) { echo "Fehler: Ungültige Signatur — " . $e->getMessage();} catch (\\Exception $e) { echo "Fehler: " . $e->getMessage();}?>Die Methode decode() gibt ein stdClass-Objekt mit den Payload-Daten zurück. Wenn das Token ungültig ist, wird eine entsprechende Ausnahme ausgelöst. Es wird empfohlen, immer die Ausnahmen ExpiredException und SignatureInvalidException zu behandeln.
Verwendung asymmetrischer Verschlüsselung (RS256)
Um die Sicherheit zu erhöhen, verwenden Sie den Algorithmus RS256 mit einem Schlüsselpaar (privat/öffentlich). Dies ist besonders in einer Microservice-Architektur relevant:
<?php// Schlüsselgenerierung (einmalig ausführen)// openssl genrsa -out private.pem 2048// openssl rsa -in private.pem -pubout -out public.pem
$privateKey = file_get_contents(' Auch in der Bibliothek
Logging in Kotlin: Die besten Bibliotheken und Tools für die Entwicklung
cereal C++: Vollständiges Tutorial mit Beispielen
Konfiguration von Rust-Anwendungen: Die Bibliothek `config` für flexible Einstellungen
Arbeiten mit ZIP-Archiven in Go (Golang): Erstellen, Lesen und Extrahieren von Dateien
Überwachung von C++-Anwendungen: Bibliotheken und Tools zur Metrikenerfassung