Heim >Backend-Entwicklung >PHP-Tutorial >So authentifizieren Sie sich in der PHP-API-Schnittstelle mithilfe von JWT
In der Webentwicklung ist eine der häufigsten Anforderungen die Benutzerauthentifizierung. Um eine sichere Authentifizierung zu implementieren, können Webentwickler auf viele verschiedene Mechanismen zurückgreifen. Eine beliebte Methode sind JSON Web Tokens (JWT), die eine tokenbasierte Authentifizierungsmethode bieten.
In diesem Artikel stellen wir die Grundkonzepte von JWT vor und demonstrieren anschließend, wie man JWT zur Authentifizierung in PHP verwendet. Zur Veranschaulichung verwenden wir eine einfache Beispiel-API.
JWT ist ein offener Standard (RFC 7519), der ein auf dem JSON-Format basierendes Token-Protokoll zur Übertragung von Informationen zwischen dem Server und dem Client definiert. Ein JWT besteht aus drei Teilen: Header, Payload und Signatur.
Der Header enthält Metadaten zum Token, wie z. B. Tokentyp und Signaturalgorithmus. Die Payload enthält die zu übertragenden Daten. Die Übertragung von JWT erfolgt mittels Base64-Kodierung. Der Signaturteil besteht darin, den Hashwert des Headers und der Nutzlast zu signieren.
In tatsächlichen Anwendungen generieren wir normalerweise ein JWT, nachdem sich der Benutzer erfolgreich angemeldet hat, und senden es dann an den Client zurück. Jedes Mal, wenn der Client auf eine geschützte API zugreift, muss er ein JWT als Authentifizierungsinformationen an den Server senden. Der Server kann die Gültigkeit des JWT überprüfen und den Benutzer darauf basierend authentifizieren.
Lassen Sie uns demonstrieren, wie Sie JWT zur Authentifizierung in PHP verwenden. In diesem Beispiel erstellen wir eine einfache API zur Validierung von JWT. Die API akzeptiert GET-Anfragen und übergibt JWT als Abfrageparameter.
Zuerst müssen wir die PHP-JWT-Bibliothek installieren. Wir können Composer verwenden, um den Import abzuschließen:
composer require firebase/php-jwt
Dann müssen wir eine Funktion schreiben, um die Nutzdaten in JWT zu konvertieren und zu signieren:
function generateToken($payload) { $key = "secret_key"; $token = array( "iss" => "http://example.org", "aud" => "http://example.com", "iat" => time(), "exp" => time() + (60*60), "data" => $payload ); return JWT::encode($token, $key); }
In dieser Funktion legen wir einige grundlegende Metadaten fest, wie zum Beispiel „iss“ ( Aussteller), „aud“ (Empfänger), „iat“ (Ausgabezeit) und „exp“ (Ablaufzeit). Wir fügen auch Benutzerdaten zum Datenabschnitt des JWT hinzu. Schließlich signieren wir das JWT mit der Kodierungsmethode der PHP-JWT-Bibliothek und verwenden „secret_key“ als Signaturschlüssel.
Als nächstes müssen wir eine Validierungsfunktion schreiben, um zu überprüfen, ob das eingehende JWT gültig ist:
function validateToken($jwt) { $key = "secret_key"; try { $data = JWT::decode($jwt, $key, array('HS256')); return true; } catch (Exception $e) { return false; } }
In dieser Funktion dekodieren wir das JWT mit der Dekodiermethode der PHP-JWT-Bibliothek und validieren es mit demselben Schlüssel. Gibt true zurück, wenn die JWT-Validierung erfolgreich ist, andernfalls false.
Schließlich müssen wir ein Eingabeskript schreiben, um die GET-Anfrage zu empfangen und das JWT zu validieren:
require_once 'vendor/autoload.php'; use FirebaseJWTJWT; $jwt = $_GET['jwt']; if (validateToken($jwt)) { $data = JWT::decode($jwt, "secret_key", array('HS256')); echo "Welcome " . $data->data->username . "!"; } else { echo "Invalid token!"; }
In diesem Skript rufen wir zuerst das JWT aus den GET-Anfrageparametern ab und rufen dann die Funktion „validateToken“ auf, um zu überprüfen, ob das JWT ist gültig. Wenn das JWT gültig ist, können wir es dekodieren, unsere gespeicherten Benutzerinformationen daraus extrahieren und den Benutzer willkommen heißen. Andernfalls geben wir „Ungültiges Token!“ aus.
Der vollständige Code lautet wie folgt:
require_once 'vendor/autoload.php'; use FirebaseJWTJWT; function generateToken($payload) { $key = "secret_key"; $token = array( "iss" => "http://example.org", "aud" => "http://example.com", "iat" => time(), "exp" => time() + (60*60), "data" => $payload ); return JWT::encode($token, $key); } function validateToken($jwt) { $key = "secret_key"; try { $data = JWT::decode($jwt, $key, array('HS256')); return true; } catch (Exception $e) { return false; } } $jwt = $_GET['jwt']; if (validateToken($jwt)) { $data = JWT::decode($jwt, "secret_key", array('HS256')); echo "Welcome " . $data->data->username . "!"; } else { echo "Invalid token!"; }
In diesem Artikel wird erläutert, wie Sie JWT für die Authentifizierung in PHP verwenden. Wir haben JWT basierend auf einer einfachen API demonstriert und detailliert beschrieben, wie ein JWT generiert und validiert wird.
Die wichtigsten Punkte bei der Verwendung von JWT zur Authentifizierung sind die korrekte Einstellung der JWT-Metadaten und die Verwendung des richtigen Signaturalgorithmus. Darüber hinaus sollten JWTs immer mit einem sicheren Schlüssel signiert werden.
Daher sollten Sie bei der Entwicklung von Anwendungen sorgfältig überlegen, wie Sie JWT verwenden, um sicherzustellen, dass Ihre Anwendung sicher ist.
Das obige ist der detaillierte Inhalt vonSo authentifizieren Sie sich in der PHP-API-Schnittstelle mithilfe von JWT. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!