Heim  >  Artikel  >  PHP-Framework  >  Wie verwende ich ThinkPHP6 für die JWT-Authentifizierung?

Wie verwende ich ThinkPHP6 für die JWT-Authentifizierung?

王林
王林Original
2023-06-12 12:18:102506Durchsuche

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.

  1. Installieren und konfigurieren Sie die JWT-Erweiterung

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.

  1. JWT-Authentifizierungscontroller implementieren

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 thinkacadeDb;

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.

  1. JWT-Authentifizierungs-Middleware hinzufügen

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 thinkacadeConfig;

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!

Stellungnahme:
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