Mit der Entwicklung des Internets ist die Zahl der Nutzer von Webanwendungen sukzessive gestiegen und Sicherheitsaspekte sind immer wichtiger geworden. Die Authentifizierung ist ein wichtiger Bestandteil der Sicherheit von Webanwendungen, da nur authentifizierte Benutzer auf Ressourcen zugreifen können, für die Berechtigungen erforderlich sind.
JSON Web Token (JWT) ist ein leichtes, eigenständiges Authentifizierungstoken, das eine hervorragende Möglichkeit zur sicheren Übertragung von Informationen zwischen Webanwendungen bietet. Das JWT-Authentifizierungsschema eignet sich für verteilte Systeme und Single-Page-Anwendungen.
ThinkPHP ist ein beliebtes PHP-Framework, das viele Tools zum Entwickeln sicherer Webanwendungen bereitstellt. In diesem Artikel erfahren Sie, wie Sie JWT zur Authentifizierung in ThinkPHP6 verwenden, um die Sicherheit Ihrer Anwendung zu erhöhen.
Entwicklungsumgebung und Abhängigkeiten
Bevor wir beginnen, müssen wir sicherstellen, dass die Entwicklungsumgebung korrekt eingerichtet wurde. Im Folgenden sind die in diesem Artikel verwendeten Umgebungen und Abhängigkeiten aufgeführt. Bitte ändern Sie es entsprechend Ihren Bedürfnissen.
Schritt 1: Firebase JWT PHP-Bibliothek installieren
Die Installation der Firebase JWT PHP-Bibliothek besteht darin, im ersten Schritt das JWT-Authentifizierungsschema zu verwenden. Diese Bibliothek hilft uns beim Erstellen, Signieren und Überprüfen von JWTs.
Wir können Composer verwenden, um die Firebase JWT PHP-Bibliothek zu installieren. Geben Sie den folgenden Befehl in die Befehlszeile ein:
composer require firebase/php-jwt
Schritt 2: Token-Klasse erstellen
Um die Verwaltung und Verwendung von JWT zu erleichtern, erstellen wir eine Klasse mit dem Namen Token, um verschiedene Aspekte der JWT-Überprüfung abzuwickeln. Diese Klasse umfasst Funktionen wie das Erstellen von Token, das Überprüfen von Token und das Abrufen von Token-Informationen.
Erstellen Sie die Datei Token.php im Verzeichnis app/common und fügen Sie den folgenden Code hinzu:
<?php namespace appcommon; use FirebaseJWTJWT; class Token { private static $key = 'your_secret_key'; private static $alg = 'HS256'; public static function createToken($data, $expiration = 3600) { $payload = [ 'iss' => 'localhost', 'sub' => 'token', 'iat' => time(), 'exp' => time() + $expiration, 'data' => $data ]; return JWT::encode($payload, self::$key, self::$alg); } public static function decodeToken($token) { return JWT::decode($token, self::$key, [self::$alg]); } public static function getDataByToken($token) { $decoded = self::decodeToken($token); if (isset($decoded->data)) { return $decoded->data; } else { return false; } } public static function verifyToken($token) { $result = false; try { $decoded = self::decodeToken($token); $result = true; } catch (Exception $e) { // Invalid token } return $result; } }
Im Code verwenden wir encode()
in der Bibliothek FirebaseJWTJWT
und die Methode decode()
zum Erstellen und Parsen von JWT. $key
ist der Schlüssel, den wir zum Signieren des JWT verwenden, und $alg
ist der Algorithmus, den wir auswählen. In der Methode createToken()
verwenden wir die vier Schlüssel (iss, iat, exp und sub) aus der JWT-Nutzlast und fügen benutzerdefinierte Daten
hinzu. Der Parameter $expiration
gibt die Ablaufzeit des JWT an. Daher kann JWT nur innerhalb des Gültigkeitszeitraums verwendet werden. FirebaseJWTJWT
库中的encode()
和decode()
方法来创建和解析 JWT。$key
是我们用于签名 JWT 的密钥,$alg
是我们选择的算法。 在createToken()
方法中,我们使用 JWT 负载中的四个键(iss,iat,exp和sub)并添加自定义data
。$expiration
参数指定 JWT 的过期时间。因此,JWT 只能在有效期内使用。
步骤3:在中间件中验证令牌
现在我们已经创建了 Token 类以处理 JWT 相关的工作,我们需要在中间件中验证用户 JWT。使用中间件可以方便地在应用程序的控制器代码中拦截和设置响应,并且可以将代码分离到不同的类中以便更好地管理和修改。
在 app/middleware 目录下创建Jwt.php文件,并添加以下代码:
<?php namespace appmiddleware; use appcommonToken; use thinkexceptionHttpResponseException; use thinkResponse; class Jwt { public function handle($request, Closure $next) { if (!$request->header('Authorization')) { return json(['code' => 401, 'msg' => 'Unauthorized']); } $header = $request->header('Authorization'); $token = substr($header, 7); if (Token::verifyToken($token)) { $request->data = Token::getDataByToken($token); return $next($request); } else { return json(['code' => 401, 'msg' => 'Unauthorized']); } } }
在此中间件中,我们使用 Token 类中的verifyToken()
方法来验证 JWT。 此方法将返回 true 或 false,表示令牌是否有效。 如果有效,我们将使用getDataByToken()
方法来获取 JWT 的数据部分并将其存储在$request->data
中。 这样,控制器就可以使用此数据。
步骤4:设置路由
现在,我们已经创建了中间件,我们需要将其应用到适当的路由上。
假设我们要保护/api/user
的路由,我们需要在routepi.php
文件中按如下方式设置路由:
use appmiddlewareJwt; Route::group('api', function() { Route::get('user', 'UserController@getUserInfo')->middleware(Jwt::class); });
请注意,在此路由中,我们将Jwt
中间件作为参数传递给middleware()
方法。这是UserController
中的getUserInfo()
方法的示例代码。
<?php namespace appcontroller; use appcommonToken; class UserController { public function getUserInfo() { $data = request()->data; ... } ... }
在控制器中,您可以通过调用$request->data
rrreee
In dieser Middleware verwenden wir die MethodeverifyToken()
in der Token-Klasse, um das JWT zu überprüfen. Diese Methode gibt „true“ oder „false“ zurück und gibt an, ob das Token gültig ist. Wenn gültig, verwenden wir die Methode getDataByToken()
, um den Datenteil des JWT abzurufen und ihn in $request->data
zu speichern. Diese Daten stehen dann dem Verantwortlichen zur Verfügung. Schritt 4: Routen einrichten🎜🎜Da wir nun die Middleware erstellt haben, müssen wir sie auf die entsprechenden Routen anwenden. 🎜🎜Angenommen, wir möchten die Route von /api/user
schützen, müssen wir die Route in der Datei route pi.php
wie folgt festlegen: 🎜rrreee🎜Bitte beachten In dieser Route übergeben wir die Jwt
-Middleware als Parameter an die middleware()
-Methode. Dies ist der Beispielcode für die Methode getUserInfo()
in UserController
. 🎜rrreee🎜Im Controller können Sie auf die im authentifizierten JWT gespeicherten Daten zugreifen, indem Sie $request->data
aufrufen. 🎜🎜Fazit🎜🎜Die JWT-Authentifizierungsmethode kann Ihre Webanwendung sicherer und zuverlässiger machen. In diesem Artikel haben wir beschrieben, wie Sie die Firebase JWT PHP-Bibliothek zum Erstellen und Validieren von JWTs in ThinkPHP6 verwenden. 🎜🎜Wir haben eine Klasse namens Token erstellt, die für die Verarbeitung von JWT-bezogenen Arbeiten verwendet wird, und eine Middleware zum Validieren von JWT und Festlegen von Daten hinzugefügt. Schließlich richten wir den Routing- und Controller-Code ein, der diese Middleware verwendet, um auf die im JWT gespeicherten Daten zuzugreifen. 🎜🎜Der Hauptzweck der Einführung der JWT-Authentifizierung besteht darin, sicherzustellen, dass Ressourcen in der Anwendung nur von authentifizierten Benutzern verwendet werden können. Ich hoffe, dieser Artikel hat Ihnen geholfen zu verstehen, wie Sie Ihre Anwendung mithilfe der JWT-Authentifizierung sichern können! 🎜Das obige ist der detaillierte Inhalt vonVerwendung der JWT-Validierung in ThinkPHP6. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!