Im heutigen Informationszeitalter ist API nicht mehr nur eine Technologie im Softwareentwicklungsprozess, sondern zu einem unverzichtbaren Bestandteil moderner Webanwendungen geworden. Da API-Schnittstellen anfällig für Angriffe sind, ist Sicherheit einer der wichtigsten Aspekte bei der Entwicklung von APIs. JWT (JSON Web Token) und JWS (JSON Web Signature) sind zwei Authentifizierungsmethoden, die häufig zum Sichern von APIs verwendet werden.
JWT ist ein JSON-basiertes Sicherheitstoken, das zur Übertragung von Informationen zwischen kommunizierenden Parteien verwendet wird. Es besteht aus drei Teilen: Header, Payload und Signatur. Der Header beschreibt den Token-Typ und -Algorithmus, die Nutzlast enthält die erforderlichen Informationen und die Signatur dient zur Überprüfung der Authentizität des Tokens. Bei Verwendung von JWT wird dieses Token als Authentifizierungstoken für API-Anfragen verwendet.
JWS ist ein Standard zum Hinzufügen digitaler Signaturen zu Textzeichenfolgen. Es ermöglicht die sichere Übertragung von Nachrichten in nicht vertrauenswürdigen Umgebungen und stellt die Absenderauthentifizierung und Nachrichtenintegrität sicher. JWS verwendet typischerweise SHA-256- oder SHA-512-Algorithmen, um Signaturen zu generieren.
In diesem Artikel erfahren Sie, wie Sie JWT und JWS in PHP für die API-Authentifizierung verwenden.
Schritt 1: Abhängigkeiten installieren
Zuerst müssen wir einige Abhängigkeiten installieren, um JWT und JWS zu unterstützen. Installieren Sie die Abhängigkeiten mit dem folgenden Befehl:
composer require firebase/php-jwt composer require lcobucci/jwt
Schritt 2: JWT generieren
Bevor wir JWT verwenden, müssen wir zuerst das JWT generieren. Unten ist der PHP-Code, der zum Generieren des JWT verwendet wird:
use FirebaseJWTJWT; // Set up the JWT payload data $payload = array( "sub" => "1234567890", "name" => "John Doe", "iat" => 1516239022 ); // Set up the JWT secret key $secret_key = "YOUR_SECRET_KEY"; // Generate the JWT $jwt = JWT::encode($payload, $secret_key);
Mit diesem Code haben wir erfolgreich ein JWT generiert. In diesem Code legen wir die Header, Payload und Signatur fest. Der Header enthält den Typ und den Algorithmus des JWT, die Nutzlast besteht aus den von uns bereitgestellten Daten wie Benutzer-ID, Benutzername usw. und die Signatur wird zur Überprüfung der Authentizität des Tokens verwendet.
Schritt 3: Überprüfen Sie das JWT
Der nächste Schritt besteht darin, das JWT zu überprüfen. Wir müssen den folgenden Code verwenden, um das JWT zu überprüfen:
use FirebaseJWTJWT; // Set up the JWT secret key $secret_key = "YOUR_SECRET_KEY"; // Get the JWT from the request headers $jwt = getAuthorizationHeader(); // Verify the JWT try { $payload = JWT::decode($jwt, $secret_key, array('HS256')); } catch (Exception $e) { // If the JWT is invalid, return an error response return json_encode(array( 'success' => false, 'message' => 'Invalid JWT' )); } // If the JWT is valid, return a success response with the payload data return json_encode(array( 'success' => true, 'message' => 'Valid JWT', 'payload' => $payload )); // Function to get the Authorization header from the request function getAuthorizationHeader() { $headers = apache_request_headers(); if (isset($headers['Authorization'])) { return $headers['Authorization']; } else { return null; } }
In diesem Code verwenden wir die Funktion JWT::decode(), um das JWT zu überprüfen. Wenn die Validierung erfolgreich ist, wird ein Objekt zurückgegeben, das die JWT-Nutzdaten enthält. Andernfalls wird die abgefangene Ausnahme mit einer Fehlerantwort zurückgegeben.
Schritt 4: JWS generieren
Da wir nun wissen, wie man ein JWT generiert und validiert, lernen wir, wie man JWS zum Sichern einer API verwendet. Das Folgende ist ein PHP-Codeausschnitt, der JWS generiert:
use LcobucciJWTBuilder; use LcobucciJWTSignerHmacSha256; // Set up the JWT signer $signer = new Sha256(); // Set up the JWT builder $builder = new Builder(); $builder->setIssuer('http://example.com'); $builder->setAudience('http://example.org'); $builder->setId('4f1g23a12aa', true); $builder->setIssuedAt(time()); $builder->setExpiration(time() + 3600); $builder->set('uid', 1); // Sign the JWT $token = $builder->sign($signer, 'YOUR_SECRET_KEY')->getToken(); // Get the token string $jwt = (string) $token;
Schritt 5: JWS überprüfen
Der letzte Schritt besteht darin, das JWS zu überprüfen. Wir müssen den folgenden Code verwenden:
use LcobucciJWTValidationData; // Set up the JWT secret key $secret_key = "YOUR_SECRET_KEY"; // Get the JWT from the request headers $jwt = getAuthorizationHeader(); // Verify the JWS $token = $signer->loadToken($jwt); $validationData = new ValidationData(); $validationData->setIssuer('http://example.com'); $validationData->setAudience('http://example.org'); $validationData->setId('4f1g23a12aa'); $validationData->setCurrentTime(time()); if (!$token->validate($validationData) || !$token->verify($signer, $secret_key)) { // If the JWS is invalid, return an error response return json_encode(array( 'success' => false, 'message' => 'Invalid JWS' )); } // If the JWS is valid, return a success response with the payload data $payload = $token->getClaims(); return json_encode(array( 'success' => true, 'message' => 'Valid JWS', 'payload' => $payload ));
In diesem Code laden wir das JWT mit die Methode „loadToken()“ Verwenden Sie im Validator die Methode „validate()“, um den Inhalt des JWT zu überprüfen, und die Methode „verify()“, um zu überprüfen, ob die JWT-Signatur korrekt ist. Abschließend stellen wir eine gültige Antwort bereit, die die Daten der von JWS erhaltenen Nutzlast enthält, wenn die Validierung erfolgreich war.
Fazit
Insgesamt ist die Verwendung von JWT und JWS für die API-Authentifizierung in PHP eine sehr gute Praxis. Mit diesen Techniken können wir sicherstellen, dass nur autorisierte Benutzer auf die API zugreifen und die API vor böswilligen Benutzern schützen. Indem wir die oben genannten Schritte befolgen, können wir diese sichere Authentifizierung einfach in PHP implementieren.
Das obige ist der detaillierte Inhalt vonSo verwenden Sie JWT und JWS für die API-Authentifizierung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!