Heim > Backend-Entwicklung > PHP-Tutorial > PHP -Autorisierung mit JWT (JSON Web Tokens)

PHP -Autorisierung mit JWT (JSON Web Tokens)

Christopher Nolan
Freigeben: 2025-02-08 09:57:09
Original
839 Leute haben es durchsucht

PHP Authorization with JWT (JSON Web Tokens)

Anwendungsauthentifizierung verwendet, um sich ausschließlich auf Anmeldeinformationen wie Benutzername/Mailbox und Kennwort zu verlassen, und die Sitzung wurde verwendet, um den Benutzerstatus zu erhalten, bis sich der Benutzer anmeldet. Danach begannen wir mit der Authentifizierungs -API. Kürzlich werden JSON Web Token (JWT) zunehmend zur Authentifizierung von Serveranforderungen verwendet.

In diesem Artikel wird vorgestellt, was JWT ist und wie PHP für JWT-basierte Benutzeranforderungsauthentifizierung verwendet wird.

Schlüsselpunkte

  1. Entwicklung von Authentifizierungsmethoden: Dieser Artikel beschreibt die Entwicklung von Benutzerauthentifizierungsmethoden, von herkömmlichen Sitzungen bis zur Verwendung von JSON -Web Tokens (JWT), wobei die Verwendung sicherer und effizienter Transformationen der Webanwendungen bei der Benutzerauthentifizierung hervorgehoben wird und Sitzungsmanagement erfolgt.
  2. Vorteile und Anwendungen von JWT: In diesem Artikel werden die Vorteile von JWT gegenüber anderen Authentifizierungsmethoden wie die Fähigkeit zum Speichern von Informationen und Metadaten, Kompatibilität mit OAuth2 und die Bereitstellung von abgelaufenen Kontrollen erläutert und veranschaulicht Wie JWT die Sicherheit und Flexibilität des Benutzerauthentifizierungsprozesses verbessert.
  3. Praktische Anwendungen in PHP: Dieser Artikel bietet einen umfassenden Leitfaden zur Implementierung von JWT in PHP-basierten Anwendungen, die die Erzeugung, Verwendung und Überprüfung von JWT abdecken. Dies umfasst detaillierte Code-Beispiele und -erklärungen, die den Lesern eine klare Roadmap zur Integration der JWT-basierten Authentifizierung in ihre eigenen Webprojekte bieten.

jwt und Sitzung

, warum ist das Gespräch nicht so gut? Es gibt drei Hauptgründe:

  • Die Daten werden auf dem Server im Klartext gespeichert. Auch wenn die Daten normalerweise nicht in einem öffentlichen Ordner gespeichert werden, kann jeder mit ausreichendem Serverzugriff den Inhalt der Sitzungsdatei lesen.
  • Sie umfassen Lesen/Schreiben von Dateisystemen. Jedes Mal, wenn eine Sitzung beginnt oder ihre Daten geändert werden, muss der Server die Sitzungsdatei aktualisieren. Gleiches gilt jedes Mal, wenn die App ein Sitzungs -Cookie sendet. Wenn die Anzahl der Benutzer groß ist, kann der Server langsamer werden, es sei denn, Sie verwenden alternative Sitzungsspeicheroptionen wie Memcached und Redis.
  • verteilte/clusterierte Anwendungen. Da Sitzungsdateien standardmäßig auf dem Dateisystem gespeichert werden, ist es schwierig, verteilte oder gruppierte Infrastruktur für hoch verfügbare Anwendungen zu erstellen (für die Technologien wie Last -Balancer und Cluster -Server erforderlich sind). Andere Speichermedien und spezielle Konfigurationen müssen implementiert werden, und ihre Bedeutung muss vollständig verstanden werden.

jwt

Beginnen wir jetzt, JWT zu lernen. Die JSON -Web -Token -Spezifikation (RFC 7519) wurde erstmals am 28. Dezember 2010 veröffentlicht, und das letzte Update fand im Mai 2015 statt.

jwt hat viele Vorteile gegenüber API -Schlüssel, darunter:

  • API -Schlüssel sind zufällige Zeichenfolgen, während JWTs Informationen und Metadaten enthalten. Diese Informationen und Metadaten können verschiedene Inhalte beschreiben, z.
  • JWT erfordert keine zentralisierte Ausgabe- oder Widerrufsagentur.
  • jwt ist mit oAuth2 kompatibel.
  • JWT -Daten können überprüft werden.
  • jwt hat die Kontrolle abgelaufen.
  • jwt eignet sich für räumlich begrenzte Umgebungen wie HTTP-Autorisierungsheader.
  • Daten werden im JSON -Format (JavaScript -Objekt Notation) übertragen.
  • jwt wird unter Verwendung von Base64url -Codierung dargestellt.

Wie sieht JWT aus?

Dies ist ein JWT -Beispiel:

<code>eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE0MTY5MjkxMDksImp0aSI6ImFhN2Y4ZDBhOTVjIiwic2NvcGVzIjpbInJlcG8iLCJwdWJsaWNfcmVwbyJdfQ.XCEwpBGvOLma4TCoh36FU7XhUbcskygS81HE1uHLf0E</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Auf den ersten Blick scheint diese Zeichenfolge nur eine zufällige Gruppe von Zeichen zu sein, die mit Perioden oder Punktzeichen verbunden sind. Es scheint also nicht anders zu sein als der API -Schlüssel. Wenn Sie jedoch genau hinschauen, werden Sie feststellen, dass es drei separate Zeichenfolgen gibt.

jwt Header

Die erste Zeichenfolge ist der JWT -Header. Es ist eine Basis64-URL-kodierte JSON-String. Es gibt den Verschlüsselungsalgorithmus an, mit dem die Signatur und die Art des Tokens erzeugt werden, der immer auf JWT eingestellt ist. Der Algorithmus kann symmetrisch oder asymmetrisch sein.

Der symmetrische Algorithmus verwendet einen einzelnen Schlüssel zum Erstellen und Überprüfen von Token. Dieser Schlüssel wird zwischen dem Schöpfer und dem Verbraucher des JWT geteilt. Stellen Sie sicher, dass nur der Schöpfer und der Verbraucher den Schlüssel kennen. Andernfalls kann jeder ein gültiges Token erstellen. Der asymmetrische Algorithmus verwendet einen privaten Schlüssel, um das Token zu unterzeichnen, und verwendet einen öffentlichen Schlüssel, um das Token zu überprüfen. Diese Algorithmen sollten verwendet werden, wenn der gemeinsame Schlüssel unpraktisch ist oder wenn andere Parteien nur die Integrität des Tokens überprüfen müssen.

JWTs Nutzlast

Die zweite Zeichenfolge ist die Nutzlast von JWT. Es ist auch eine Basis64-URL-kodierte JSON-String. Es enthält einige Standardfelder, die als "Deklaration" bezeichnet werden. Es gibt drei Arten von Deklarationen:

registriert

, öffentlich und privat . Die Registrierungserklärung ist vordefiniert. Sie finden eine Liste von ihnen im RFC von JWT. Hier sind einige häufig verwendete Aussagen:

iat: Datum und Zeitstempel vom Token ausgestellt.
  • Schlüssel: Eine einzigartige Zeichenfolge, mit der das Token überprüfen kann. Dies widerspricht jedoch der Emittenteninstitution ohne zentralisierte.
  • ISS: Eine Zeichenfolge, die den Namen oder die Kennung des Emittenten enthält. Kann ein Domain -Name sein, der verwendet werden kann, um Token von anderen Anwendungen abzuwerfen.
  • NBF: Das Token sollte als gültiges Datum und Zeitstempel angesehen werden. Sollte gleich oder größer sein als IAT.
  • Exp: Datum und Zeitstempel, den das Token aufhält, sollte gültig aufhören. Sollte größer sein als IAT und NBF.
  • Sie können öffentliche Erklärungen nach Bedarf definieren. Sie können jedoch nicht mit einer registrierten Erklärung oder einer öffentlichen Erklärung übereinstimmen, die bereits vorhanden ist. Sie können eine private Erklärung erstellen, wie Sie möchten. Sie sind nur für beide Parteien: Produzenten und Verbraucher.

JWTs Signatur

Die Signatur von

JWT ist ein Verschlüsselungsmechanismus, der die Daten des JWT unter Verwendung einer digitalen Signatur schützt, die für den Inhalt des Tokens einzigartig ist. Signatur sorgt für die Integrität des JWT, damit der Benutzer überprüfen kann, ob der bösartige Schauspieler nicht manipuliert wurde.

JWTs Signatur ist eine Kombination aus drei Dingen:

  • JWTs Header
  • JWTs Nutzlast
  • ein geheimes Wert

Diese drei werden unter Verwendung des im JWT -Header angegebenen Algorithmus digital signiert ( nicht verschlüsselt ). Wenn wir das obige Beispiel dekodieren, erhalten wir die folgende JSON -Zeichenfolge:

JWTs Header

<code>eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE0MTY5MjkxMDksImp0aSI6ImFhN2Y4ZDBhOTVjIiwic2NvcGVzIjpbInJlcG8iLCJwdWJsaWNfcmVwbyJdfQ.XCEwpBGvOLma4TCoh36FU7XhUbcskygS81HE1uHLf0E</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

JWTs Daten

<code>{
    "alg": "HS256",
    "typ": "JWT"
}</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Sie können JWT.io selbst ausprobieren, wo Sie versuchen können, Ihren eigenen JWT zu kodieren und zu dekodieren.

Verwenden Sie JWT in PHP-basierten Anwendungen

Jetzt, da Sie gelernt haben, was JWT ist, ist es Zeit zu lernen, wie Sie sie in Ihrer PHP -Anwendung verwenden. Fühlen Sie sich frei, den Code dieses Artikels zu klonen oder unsere Schritte zu befolgen, bevor Sie sich damit befassen.

Sie können eine Reihe von Möglichkeiten einnehmen, um JWT zu integrieren, aber hier sind die, die wir nehmen werden.

Abgesehen von den Anmeldungs- und Abmeldeseiten müssen alle Anforderungen an die Anwendung über JWT authentifiziert werden. Wenn der Benutzer eine Anfrage ohne JWT stellt, wird er auf die Anmeldeseite umgeleitet.

Nachdem der Benutzer das Anmeldeformular eingefüllt und eingereicht hat, wird das Formular über JavaScript in die Anmeldendpunkt -Authentikate.php in unserer Anwendung übermittelt. Der Endpunkt zieht dann die Anmeldeinformationen (Benutzername und Passwort) aus der Anfrage und prüft, ob sie gültig sind.

Wenn es gültig ist, generiert es eine JWT und sendet es an den Client zurück. Wenn der Client den JWT erhält, speichert er das JWT und verwendet sie für jede zukünftige Anfrage an die Anwendung.

Für ein einfaches Szenario kann der Benutzer nur eine Ressource anfordern - eine ordnungsgemäß benannte PHP -Datei ressource.php. Es tut nicht viel, es gibt nur eine Zeichenfolge zurück, die zum Zeitpunkt der Anfrage den aktuellen Zeitstempel enthält.

Es gibt verschiedene Möglichkeiten, JWT bei einer Anfrage zu verwenden. In unserer Bewerbung wird der JWT in den Header der Trägerautorisierung gesendet.

Wenn Sie nicht mit der Genehmigung der Träger vertraut sind, handelt es sich um eine Form der HTTP -Authentifizierung, bei der ein Token (wie JWT) in den Anforderungsheader gesendet wird. Der Server kann das Token überprüfen und feststellen, ob der "Inhaber" -Access auf das Token gewährt werden sollte.

Dies ist ein Beispiel für einen Header:

<code>{
    "iat": 1416929109,
    "jti": "aa7f8d0a95c",
    "scopes": [
        "repo",
        "public_repo"
    ]
}</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Für jede Anfrage, die unsere Anwendung erhält, versucht PHP, das Token aus dem Trägerkopfzeile zu extrahieren. Wenn es existiert, wird es verifiziert. Wenn der Benutzer gültig ist, wird eine normale Antwort auf die Anfrage angezeigt. Wenn der JWT jedoch ungültig ist, darf der Benutzer nicht auf die Ressource zugreifen.

Bitte beachten Sie, dass JWT nicht dazu bestimmt ist, Sitzungs Cookies zu ersetzen.

Voraussetzungen

Zunächst müssen wir PHP und Komponist auf unserem System installieren.

Führen Sie im Root -Verzeichnis des Projekts Komponisten Installation aus. Dadurch werden Firebase PHP-JWT, eine Bibliothek von Drittanbietern, die JWT-Operationen und Laminas-Config vereinfacht, um den Zugriff auf Konfigurationsdaten in Anwendungen zu vereinfachen.

Login -Formular

Bilder

Füllen wir nach der Installation der Bibliothek den Anmeldecode in authenticate.php nach und nach ab. Wir machen zunächst das übliche Setup, um sicherzustellen, dass der von Composer generierte Autoloader verfügbar ist.

<code>eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE0MTY5MjkxMDksImp0aSI6ImFhN2Y4ZDBhOTVjIiwic2NvcGVzIjpbInJlcG8iLCJwdWJsaWNfcmVwbyJdfQ.XCEwpBGvOLma4TCoh36FU7XhUbcskygS81HE1uHLf0E</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Nach Erhalt des Formulars werden die Anmeldeinformationen gegen die Datenbank oder einen anderen Datenspeicher überprüft. Für die Zwecke dieses Beispiels gehen wir davon aus, dass sie gültig sind und $ hasvalidcredentials auf true festlegen.

<code>{
    "alg": "HS256",
    "typ": "JWT"
}</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Als nächstes initialisieren wir eine Reihe von Variablen, um JWT zu generieren. Denken Sie daran, dass JWT, da auf dem Kunden überprüft werden kann, keine sensiblen Informationen enthalten. Eine andere Sache, die es wert ist, darauf hinzuweisen, ist, dass $ SecretKey nicht so initialisiert wird. Sie können es in Ihrer Umgebung einstellen und extrahieren, Bibliotheken wie PHPDotenv verwenden oder in einer Konfigurationsdatei einstellen. In diesem Fall vermeide ich dies, weil ich mich auf den JWT -Code konzentrieren möchte.

lecken Sie es nicht oder speichern Sie es unter Versionskontrolle!

Nach der Vorbereitung der Nutzlastdaten verwenden wir als nächstes die statische Encode-Methode von PHP-JWT, um die JWT zu erstellen.
<code>{
    "iat": 1416929109,
    "jti": "aa7f8d0a95c",
    "scopes": [
        "repo",
        "public_repo"
    ]
}</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Diese Methode:

Array in JSON
    konvertieren
  • Header erzeugen
  • unterschreiben Sie die Nutzlast
  • codieren endgültig String
  • es akzeptiert drei Parameter:

Nutzlastinformationen
  • Schlüssel
  • Algorithmus zur Unterzeichnung von Token
  • Geben Sie das generierte Token zurück, indem Sie Echo auf das Funktionsergebnis aufrufen:

Verwenden Sie JWT
<code>Authorization: Bearer ab0dde18155a43ee83edba4a4542b973</code>
Nach dem Login kopieren

Bilder

Jetzt, da der Client das Token hat, können Sie es mit JavaScript oder einem beliebigen Mechanismus speichern. Hier ist ein Beispiel dafür, wie man mit nativem JavaScript operiert. In index.html wird nach erfolgreicher Einreichung des empfangenen JWT im Speicher gespeichert, das Anmeldeformular versteckt und eine Schaltfläche, die den Zeitstempel beantragt, wird angezeigt:

Verwenden Sie JWT
<?php
declare(strict_types=1);

use Firebase\JWT\JWT;

require_once('../vendor/autoload.php');
Nach dem Login kopieren

Wenn Sie auf die Schaltfläche Aktueller Zeitstempel erhalten, wird eine GET -Anforderung an ressourcen.php ausgestellt, wodurch die nach der Authentifizierung erhaltene JWT im Autorisierungsheader festgelegt wird.

Wenn wir auf die Schaltfläche klicken, wird eine ähnliche Anfrage wie folgt ausgestellt:
<?php
// 从请求中提取凭据

if ($hasValidCredentials) {
Nach dem Login kopieren

unter der Annahme, dass die JWT gültig ist, werden wir die Ressource sehen und die Antwort wird danach in die Konsole geschrieben.
$secretKey  = 'bGS6lzFqvvSQ8ALbOxatm7/Vk7mLQyzqaS34Q4oR1ew=';
$issuedAt   = new DateTimeImmutable();
$expire     = $issuedAt->modify('+6 minutes')->getTimestamp();      // 添加60秒
$serverName = "your.domain.name";
$username   = "username";                                           // 从过滤后的POST数据中检索

$data = [
    'iat'  => $issuedAt->getTimestamp(),         // 颁发时间:生成令牌的时间
    'iss'  => $serverName,                       // 颁发者
    'nbf'  => $issuedAt->getTimestamp(),         // 不早于
    'exp'  => $expire,                           // 过期
    'userName' => $username,                     // 用户名
];
Nach dem Login kopieren

Überprüfen Sie JWT

Lassen Sie uns schließlich sehen, wie Sie das Token in PHP überprüfen können. Wie immer werden wir den Autoloader des Komponisten einbeziehen. Wir können dann überprüfen, ob die richtige Anforderungsmethode verwendet wird. Um weiter auf JWT-spezifische Code zu konzentrieren, habe ich den Code übersprungen, der dies tut:

Der Code wird dann versucht, das Token aus dem Trägerkopfball zu extrahieren. Ich habe dies mit preg_match gemacht. Wenn Sie mit der Funktion nicht vertraut sind, führt sie eine regelmäßige Ausdrucksübereinstimmung in der Zeichenfolge durch.
<?php     // 将数组编码为JWT字符串。
    echo JWT::encode(
        $data,
        $secretKey,
        'HS512'
    );
}
Nach dem Login kopieren

Die Regex, die ich hier benutze, wird versuchen, das Token aus dem Trägerheader zu extrahieren und alles andere abzuwerfen. Wenn nicht gefunden, wird eine HTTP 400 -Fehleranforderung zurückgegeben:

Beachten Sie, dass Apache standardmäßig den Header http_authorization nicht an PHP übergibt. Der Grund dafür ist:
const store = {};
const loginButton = document.querySelector('#frmLogin');
const btnGetResource = document.querySelector('#btnGetResource');
const form = document.forms[0];

// 将jwt插入到store对象中
store.setJWT = function (data) {
  this.JWT = data;
};

loginButton.addEventListener('submit', async (e) => {
  e.preventDefault();

  const res = await fetch('/authenticate.php', {
    method: 'POST',
    headers: {
      'Content-type': 'application/x-www-form-urlencoded; charset=UTF-8'
    },
    body: JSON.stringify({
      username: form.inputEmail.value,
      password: form.inputPassword.value
    })
  });

  if (res.status >= 200 && res.status < 300) {
    const jwt = await res.text();
    store.setJWT(jwt);
    frmLogin.style.display = 'none';
    btnGetResource.style.display = 'block';
  } else {
    // 处理错误
    console.log(res.status, res.statusText);
  }
});
Nach dem Login kopieren

Der grundlegende Autorisierungsheader ist nur sicher, wenn Ihre Verbindung über HTTPS abgeschlossen ist, da sonst die Anmeldeinformationen in codiertem Klartext (unverschlüsselt) über das Netzwerk gesendet werden, was ein großes Sicherheitsproblem darstellt.

Ich verstehe die Logik dieser Entscheidung vollständig. Um jedoch viel Verwirrung zu vermeiden, fügen Sie Ihre Apache -Konfiguration Folgendes hinzu. Der Code funktioniert dann wie erwartet. Wenn Sie Nginx verwenden, sollte der Code wie erwartet funktionieren:

<code>eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE0MTY5MjkxMDksImp0aSI6ImFhN2Y4ZDBhOTVjIiwic2NvcGVzIjpbInJlcG8iLCJwdWJsaWNfcmVwbyJdfQ.XCEwpBGvOLma4TCoh36FU7XhUbcskygS81HE1uHLf0E</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Als nächstes versuchen wir, den passenden JWT zu extrahieren, der sich im zweiten Element der Variablen $ Matches befindet. Wenn nicht verfügbar, wird kein JWT extrahiert und eine HTTP 400 -Fehleranforderung wird zurückgegeben:

<code>{
    "alg": "HS256",
    "typ": "JWT"
}</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn wir diesen Punkt erreichen, wurde die JWT extrahiert, sodass wir in die Entschlüsselungs- und Überprüfphase gehen. Dazu benötigen wir unseren Schlüssel erneut, der aus der Konfiguration der Umgebung oder Anwendung extrahiert wird. Anschließend verwenden wir die statische Decode-Methode von PHP-JWT, um sie an den JWT, den Schlüssel und eine Reihe von Algorithmen zu übergeben, mit denen die JWT dekodiert werden. Wenn es erfolgreich dekodiert werden kann, werden wir versuchen, es zu überprüfen. Mein Beispiel hier ist sehr einfach, da es nur Emittenten verwendet, nicht früher als abgelaufene Zeitstempel. In einer realen Anwendung können Sie auch viele andere Aussagen verwenden.

Wenn das Token ungültig ist, z. B. das Token abgelaufen ist, erhält der Benutzer den nicht autorisierten HTTP 401 -Header und das Skript wird beendet.
<code>{
    "iat": 1416929109,
    "jti": "aa7f8d0a95c",
    "scopes": [
        "repo",
        "public_repo"
    ]
}</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn der Dekodierungs- und Überprüfungsprozess fehlschlägt, kann dies:

sein

Die Anzahl der bereitgestellten Segmente stimmt nicht mit den oben beschriebenen Standard -Segmenten überein.
  • Der Header oder die Nutzlast ist keine gültige JSON -Zeichenfolge.
  • Die Signatur ist ungültig, was bedeutet, dass die Daten manipuliert wurden!
  • Die NBF -Deklaration ist in JWT festgelegt und sein Zeitstempel ist kleiner als der aktuelle Zeitstempel.
  • Die IAT -Erklärung ist in JWT festgelegt und sein Zeitstempel ist kleiner als der aktuelle Zeitstempel.
  • Eine Exp -Erklärung wird in JWT festgelegt, dessen Zeitstempel größer ist als der aktuelle Zeitstempel.
  • Wie Sie sehen, hat JWT eine schöne Reihe von Steuerelementen, die Sie als ungültig markieren können, ohne manuell widerrufen oder gegen eine Liste gültiger Token zu überprüfen.

Wenn der Dekodierungs- und Überprüfungsprozess erfolgreich ist, darf der Benutzer eine Anfrage ausstellen und eine entsprechende Antwort erhalten.

Zusammenfassung

Dies ist eine kurze Einführung in JSON Web Tokens (oder JWT) und wie man sie in PHP-basierten Anwendungen verwendet. Von hier aus können Sie versuchen, JWT in der nächsten API zu implementieren, vielleicht einen anderen Signaturalgorithmus zu probieren, der asymmetrische Schlüssel wie RS256 verwendet, oder in einen vorhandenen OAuth2 -Authentifizierungsserver integrieren, um sie als API -Schlüssel zu verwenden.

Wenn Sie Kommentare oder Fragen haben, können Sie uns bitte über Twitter kontaktieren.

FAQs bei der Verwendung von JWT für die PHP -Autorisierung

Können wir JWT in PHP verwenden?

Sie können JWT in PHP tatsächlich verwenden, um Authentifizierungs- und Autorisierungsmechanismen in Ihrer Webanwendung festzulegen. Um loszulegen, müssen Sie Komponist verwenden, um die PHP JWT-Bibliothek wie "Firebase/PHP-JWT" oder "LCOBUCCI/JWT" zu installieren. Diese Bibliotheken bieten die erforderlichen Tools zum Erstellen, Codieren, Dekodieren und Validieren von JWTs. Um ein JWT zu erstellen, können Sie mit der Bibliothek ein Token erstellen, das Aussagen wie Emittent, Publikum, Ablaufzeit und mehr enthält. Sobald Sie erstellt haben, können Sie das Token mit dem Schlüssel unterschreiben. Beim Empfangen eines JWT können Sie die Bibliothek verwenden, um sie zu entschlüsseln und zu überprüfen, um ihre Authentizität zu gewährleisten. Wenn das Token gültig und verifiziert ist, können Sie auf seine Erklärung zugreifen, um die Benutzeridentität und -berechtigungen zu bestimmen, sodass Sie eine sichere Authentifizierung und Autorisierung in Ihrer PHP -Anwendung implementieren können. Der Schutz Ihrer Schlüssel und die Befolgung der Best Practices bei der Verwendung von JWT ist entscheidend, um den unbefugten Zugriff auf Anwendungsressourcen zu verhindern.

Was ist die JWT -Authentifizierung in PHP?

JWT (JSON Web Token) Authentifizierung in PHP ist eine Methode, die häufig zur Implementierung der Benutzerauthentifizierung und -autorisierung in Webanwendungen verwendet wird. Es basiert auf der Token -Authentifizierung und ermöglicht eine sichere und staatenlose Benutzerauthentifizierung. So funktioniert die JWT -Authentifizierung in PHP: Zunächst generiert der Server während der Benutzerauthentifizierung oder Anmeldung ein JWT, ein kompaktes, in sich geschlossenes Token mit Informationen (Ansprüchen), die sich auf den Benutzer beziehen, wie z. B. Benutzer-ID, Benutzername und Rolle. Diese Erklärungen sind normalerweise JSON -Daten. Der Server unterschreibt diesen Token dann mit einem Schlüssel, um seine Integrität und Authentizität zu gewährleisten. Zweitens sendet der Server nach erfolgreicher Authentifizierung den JWT an den Client zurück, der normalerweise an einem sicheren Ort wie HTTP -Cookies oder lokalem Speicher gespeichert wird. Dieses Token dient als Authentifizierungsnachweis. Für nachfolgende Anfragen an geschützte Ressourcen auf dem Server findet der Client schließlich ein JWT an den Anforderungsheader an, der normalerweise den Header "Autorisierungs" mit dem Schema "Bearer" verwendet. Nach Erhalt des JWT verwendet der Server denselben Schlüssel, der während der Token -Erstellung verwendet wird, um seine Signatur zu überprüfen. Darüber hinaus prüft es, ob das Token nicht abgelaufen ist, und enthält eine gültige Erklärung. Nach erfolgreicher Überprüfung extrahiert sie Benutzerinformationen aus der Token -Erklärung und implementiert die Autorisierungslogik, um sicherzustellen, dass der Benutzer über die Berechtigungen verfügt, die für den Zugriff auf die angeforderte Ressource erforderlich sind. Dieser Ansatz ermöglicht eine sichere, staatenlose Authentifizierung in PHP-Anwendungen ohne serverseitige Sitzungsspeicher. Während die JWT -Authentifizierung in PHP viele Vorteile wie Skalierbarkeit und Staatenlosigkeit bietet, sind Best Practices für den Schutz der Schlüssel und die Einführung des Token -Managements für die Aufrechterhaltung der Sicherheit Ihrer Anwendung unerlässlich. Die Verwendung etablierter PHP -JWT -Bibliotheken kann die Token -Verarbeitung vereinfachen und die Sicherheit verbessern.

Was ist die Alternative zu JWT in PHP?

Die Alternative zu JWT (JSON Web Tokens) zur Authentifizierung und Autorisierung in PHP ist eine Sitzungsbasis-Authentifizierung. In der Sitzungsbasis-Authentifizierung verwaltet der Server eine Sitzung für jeden authentifizierten Benutzer. Wenn sich der Benutzer anmeldet, wird eine eindeutige Sitzungskennung erstellt (normalerweise als Session -Cookie im Clientbrowser gespeichert). Diese Kennung wird verwendet, um den Benutzer mit serverseitigen Sitzungsdaten zu verknüpfen, einschließlich Informationen, die sich mit dem Benutzer beziehen, z. B. Benutzer-ID, Benutzername und Berechtigungen. Die Sitzungsbasis-Authentifizierung bietet Einfachheit und einfache Implementierung. Damit ist sie für eine Vielzahl von Webanwendungen geeignet, insbesondere wenn Sie die staatenlosen und skalierbaren Funktionen von JWT nicht benötigen. Es ist von Natur aus staatlich, was vorteilhaft sein kann, wenn Sie während einer Benutzersitzung benutzerspezifische Daten (z. B. Einkaufswagen-Inhalte oder Benutzereinstellungen) verwalten müssen. Bei der Verwendung einer Sitzungsauthentifizierung sind jedoch einige Dinge zu berücksichtigen. Es ist möglicherweise nicht ganz anwendbar für verteilte oder mikroservicebasierte Architekturen, die eine aufstandslose Authentifizierung erfordern. Darüber hinaus kann das Verwalten von Benutzersitzungen die Serverlast erhöhen, insbesondere in Anwendungen mit größeren Benutzerbasis. Die Auswahl der JWT- und Sitzungsbasis-Authentifizierung in PHP sollte letztendlich den spezifischen Anforderungen und Designüberlegungen der Anwendung entsprechen, um einen sicheren und effektiven Authentifizierungsmechanismus zu gewährleisten, der Ihren Anforderungen am besten entspricht.

Wie schützt man PHP -API mit JWT?

Schutz der PHP-API mit JWT (JSON Web Tokens) beinhaltet einen mehrstufigen Prozess, der Authentifizierung und Autorisierung kombiniert. Wählen Sie zunächst die entsprechende PHP-JWT-Bibliothek (z. B. "Firebase/PHP-JWT" oder "LCOBUCCI/JWT") aus, um die tokenbezogenen Operationen zu verarbeiten und Komponist zum Verwalten von Abhängigkeiten zu verwenden. Für die Authentifizierung müssen Sie ein Benutzerauthentifizierungssystem in Ihrer PHP -Anwendung implementieren. Dieses System überprüft Benutzeranmeldeinformationen mit Ihrer Datenbank oder Ihrem Authentifizierungsanbieter. Nach einer erfolgreichen Authentifizierung generieren Sie ein JWT-Token, das benutzerbezogene Behauptungen wie die ID, den Benutzernamen und die Rolle des Benutzers enthält. Stellen Sie sicher, dass Sie die Ablaufzeit festlegen, um die Gültigkeit des Tokens zu steuern, und unterschreiben Sie das Token mit dem Schlüssel. Dieses unterschriebene Token wird als Teil der Authentifizierungsantwort an den Client zurückgeschickt. Clients speichern den empfangenen JWT sicher, normalerweise in HTTP -Cookies oder in lokalem Speicher. Für nachfolgende API -Anfragen wird der Kunde einen JWT in den Anforderungsheader als "Autorisierungs" -Header mit dem "Bearer" -Programm aufnehmen. In Ihrer PHP -API können Sie den eingehenden JWT überprüfen, indem Sie deren Signatur mit demselben Schlüssel überprüfen, der beim Erstellen des Tokens verwendet wird. Darüber hinaus überprüfen Sie, ob das Token nicht abgelaufen ist und enthält eine gültige Erklärung. Nach erfolgreicher Überprüfung extrahieren Sie Benutzerinformationen aus der Token -Erklärung und implementieren Sie die Autorisierungslogik, um sicherzustellen, dass der Benutzer über die Berechtigungen verfügt, die für den Zugriff auf die angeforderte Ressource erforderlich sind. Es ist entscheidend, den Schlüssel sicher zu halten, da es entscheidend ist, das Token zu unterschreiben und zu überprüfen. Jede Leckage dieses Schlüssels kann zu einer schwerwiegenden Sicherheitsanfälligkeit führen.

Das obige ist der detaillierte Inhalt vonPHP -Autorisierung mit JWT (JSON Web Tokens). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage