Heim > Artikel > PHP-Framework > Wie verwende ich ThinkPHP6 für die JWT-Authentifizierung?
JWT (JSON Web Token) ist ein einfacher Authentifizierungs- und Autorisierungsmechanismus, der JSON-Objekte als Sicherheitstoken verwendet, um Benutzeridentitätsinformationen sicher zwischen mehreren Systemen zu übertragen. ThinkPHP6 ist ein effizientes und flexibles MVC-Framework, das auf der PHP-Sprache basiert. Es bietet viele nützliche Tools und Funktionen, einschließlich des JWT-Authentifizierungsmechanismus. In diesem Artikel stellen wir vor, wie Sie ThinkPHP6 für die JWT-Authentifizierung verwenden, um die Sicherheit und Zuverlässigkeit von Webanwendungen zu gewährleisten.
Zuerst müssen wir die JWT-Erweiterung in unserer Anwendung installieren. Es kann durch Hinzufügen von Abhängigkeiten in der Datei „composer.json“ installiert werden:
{ "require": { "firebase/php-jwt": "^5.0.0" } }
Führen Sie dann den folgenden Befehl aus, um es zu installieren:
composer install
Sobald die Installation abgeschlossen ist, müssen wir JWT in der Konfigurationsdatei konfigurieren. Erstellen Sie die Datei jwt.php im Konfigurationsverzeichnis und fügen Sie den folgenden Inhalt hinzu:
<?php return [ 'key' => 'your-secret-key', 'alg' => 'HS256', 'exp' => 7200, // token过期时间,单位秒 ];
wobei „key“ eine Zeichenfolge ist, die zum Generieren des Signaturschlüssels für das JWT-Token verwendet wird, und „alg“ der Name des JWT-Signaturalgorithmus ist. Wir können den Algorithmus wie „HS256“, „HS512“, „RS256“ usw. auswählen. „exp“ ist die Ablaufzeit des JWT-Tokens, berechnet in Sekunden.
Als nächstes müssen wir einen JWT-Authentifizierungscontroller erstellen, um die JWT-Authentifizierung zu implementieren. Erstellen Sie die Datei AuthController.php im Verzeichnis app/controller und fügen Sie den folgenden Inhalt hinzu:
<?php namespace appcontroller; use FirebaseJWTJWT; use thinkacadeDb; class AuthController { public function login() { //在这里处理用户登陆逻辑 //... //登陆成功后生成JWT token并返回给客户端 $secretKey = config('jwt.key'); // 获取JWT生成签名的密钥 $alg = config('jwt.alg'); // 获取JWT加密算法 $payload = [ 'sub' => $user->id, // 存储用户ID 'exp' => time() + config('jwt.exp'), // 设定过期时间 ]; $jwt = JWT::encode($payload, $secretKey, $alg); // 生成JWT令牌 return ['token' => $jwt]; // 返回JWT Token给客户端 } public function dashboard() { //检查请求中的JWTToken是否有效,并返回用户信息 $jwtToken = request()->header('Authorization'); // 获取JWT Token if (!$jwtToken) { // 如果token不存在,直接返回错误信息 return ['msg' => '未验证身份,请先登录']; } $jwtInfo = JWT::decode($jwtToken, config('jwt.key'), [config('jwt.alg')]); // 使用JWT解密Token $userId = $jwtInfo->sub; // 获取token中存储的用户ID,用来查询用户信息 $user = Db::table('users')->where('id', $userId)->find(); // 查询用户信息 if (!$user) { // 用户不存在,直接返回错误信息 return ['msg' => '用户不存在']; } // 返回用户信息 return ['username' => $user['username'], 'email' => $user['email']]; } }
Im obigen Controller-Code haben wir zwei Funktionen implementiert: eine ist die Benutzeranmeldung und die andere dient dem Abrufen von Benutzerinformationen. Während des Anmeldevorgangs generieren wir ein JWT-Token und senden es zur Authentifizierung bei nachfolgenden Anfragen an den Client zurück. Bei der Dashboard-Methode prüfen wir, ob der Authorization-Header der Anfrage das JWT-Token enthält, und verwenden das JWT, um das Token zu entschlüsseln und zu überprüfen, ob die Identität des Benutzers gültig ist.
Abschließend müssen wir der Anwendung eine JWT-Authentifizierungs-Middleware hinzufügen, um die API-Schnittstelle zu schützen, die eine Authentifizierung erfordert. Erstellen Sie die Datei JwtAuth.php im Verzeichnis app/middleware und fügen Sie den folgenden Inhalt hinzu:
<?php namespace appmiddleware; use FirebaseJWTJWT; use thinkacadeConfig; class JwtAuth { public function handle($request, Closure $next) { //检查请求中的JWTToken是否有效 $jwtToken = $request->header('Authorization'); // 获取JWT Token if (!$jwtToken) { // 如果token不存在,直接返回错误信息 return response(['msg' => '未授权的API请求!'], 401); } try { $jwtInfo = JWT::decode($jwtToken, Config::get('jwt.key'), [Config::get('jwt.alg')]); // 使用JWT解密Token $request->jwtInfo = $jwtInfo; // 将解密后的JWT信息存储在请求对象中,后续控制器可以使用 return $next($request); // 继续后续请求处理 } catch (Exception $e) { // JWT Token过期或者解密失败,返回错误信息 return response(['msg' => 'JWT Token无效或已过期!'], 401); } } }
Im obigen Code haben wir überprüft, ob der Authorization-Header der Anfrage ein gültiges JWT-Token enthält. Wenn das JWT-Token ungültig oder abgelaufen ist, geben wir eine nicht autorisierte HTTP-Antwort zurück. Andernfalls setzen wir die nachfolgende Anforderungsverarbeitung fort und speichern die Informationen des JWT-Tokens im Anforderungsobjekt zur Verwendung durch nachfolgende Controller.
Schließlich müssen wir beim Routing der Anwendung JWT-Authentifizierungs-Middleware verwenden, um die API-Schnittstellen zu schützen, die eine Authentifizierung erfordern. Beispielsweise fügen wir den folgenden Code in die Datei „routes/api.php“ ein:
<?php use appmiddlewareJwtAuth; // 需要JWT认证的API接口 Route::get('dashboard', 'AuthController@dashboard')->middleware(JwtAuth::class);
Im obigen Code haben wir die Dashboard-Methode mithilfe der JwtAuth-Middleware geschützt und so sichergestellt, dass nur Anfragen mit einem gültigen JWT-Token darauf zugreifen können.
Fazit
In diesem Artikel haben wir vorgestellt, wie Sie ThinkPHP6 für die JWT-Authentifizierung verwenden, um die Sicherheit und Zuverlässigkeit von Webanwendungen zu gewährleisten. Wir haben zuerst die JWT-Erweiterung installiert und konfiguriert, dann den JWT-Authentifizierungscontroller und die JWT-Authentifizierungs-Middleware implementiert und schließlich die JWT-Authentifizierungs-Middleware beim Routing der Anwendung verwendet, um die API-Schnittstellen zu schützen, die eine Authentifizierung erfordern. Durch diese Schritte können wir den JWT-Authentifizierungsmechanismus problemlos in ThinkPHP6-Anwendungen implementieren, um die Sicherheit und Zuverlässigkeit von Webanwendungen zu gewährleisten.
Das obige ist der detaillierte Inhalt vonWie verwende ich ThinkPHP6 für die JWT-Authentifizierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!