Heim >Backend-Entwicklung >PHP-Problem >So implementieren Sie JWT mit PHP

So implementieren Sie JWT mit PHP

PHPz
PHPzOriginal
2023-04-24 10:50:102798Durchsuche

JWT (JSON Web Tokens) ist ein offener, auf JSON basierender Standard zur sicheren Übertragung von Informationen zwischen zwei Anwendungen. Es besteht aus 3 Teilen: Header, Payload und Signatur. Der Header enthält Metadaten über das Token, die Payload ist der Teil, der die Informationen tatsächlich speichert, und die Signatur wird verwendet, um die Integrität der Nachricht zu überprüfen.

In diesem Artikel erfahren Sie, wie Sie JWT mit PHP implementieren.

  1. Installationsabhängigkeiten

JWT muss über Composer installiert werden. Wenn Sie Composer nicht installiert haben, können Sie es mit dem folgenden Befehl installieren:

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

Verschieben Sie dann die ausführbare Composer-Datei in das Verzeichnis /usr/local/bin:

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

Abhängigkeiten installieren:

composer require firebase/php-jwt
  1. Token erstellen

Zuerst müssen wir zum Erstellen die Funktion jwt_encode() von PHP verwenden ein Token. Hier ist ein Beispiel: 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

Im obigen Beispiel verwenden wir die Funktion jwt_encode(), um ein JWT zu erstellen. Die Variable $key enthält den JWT-Schlüssel und die Variable $payload enthält die zu übertragenden Informationen und die Ablaufzeit. Die Ablaufzeit kann mit der PHP-Funktion time() ermittelt werden. Schließlich gibt die Funktion jwt_encode() einen JWT-String zurück. #🎜🎜#
    #🎜🎜#Verification Token#🎜🎜##🎜🎜##🎜🎜#Wir müssen die PHP-Funktion jwt_decode() verwenden, um das JWT zu überprüfen . Hier ist ein Beispiel: #🎜🎜#rrreee#🎜🎜#Im obigen Beispiel haben wir die Funktion jwt_decode() verwendet, um das JWT zu überprüfen. Wenn die Überprüfung erfolgreich ist, gibt die Funktion ein Objekt zurück, das die JWT-Informationen enthält. #🎜🎜#
      #🎜🎜#Signatur überprüfen#🎜🎜##🎜🎜##🎜🎜#Die Signatur wird verwendet, um die Integrität des JWT zu überprüfen. Wir müssen die Nachricht mit einem Schlüssel signieren, der nur dem Signaturüberprüfungsmechanismus bekannt ist. Wenn der Empfänger die Nachricht erhält, verwendet er denselben Schlüssel, um die Nachricht zu entschlüsseln und zu überprüfen. #🎜🎜##🎜🎜#JWT verwendet eine Technologie namens „Hash Message Authentication Code“ (HMAC), um das JWT zu signieren. Diese Technologie erfordert das Hashen des JWT-Headers und der Nutzlast und deren anschließende Kombination mit dem Schlüssel. Als nächstes folgt ein Beispiel für die Signaturüberprüfung: #🎜🎜#rrreee#🎜🎜#Im obigen Beispiel haben wir die Funktion verify() verwendet, um die Signatur zu überprüfen. Diese Funktion gibt einen booleschen Wert zurück. Wenn das Ergebnis wahr ist, bedeutet dies, dass die Signatur gültig ist. #🎜🎜##🎜🎜#Zusammenfassung#🎜🎜##🎜🎜#In diesem Artikel haben wir kurz vorgestellt, wie man JWT mit PHP implementiert. Zuerst müssen wir die JWT-abhängige Bibliothek installieren, dann die Funktion jwt_encode() verwenden, um das Token zu erstellen, die Funktion jwt_decode() verwenden, um das Token zu überprüfen, und schließlich Verwenden Sie verify()Funktion zur Überprüfung der Signatur. Diese Funktionen können über die JWT-Bibliothek von Firebase implementiert werden. #🎜🎜#

Das obige ist der detaillierte Inhalt vonSo implementieren Sie JWT mit PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn