Maison cadre php PensezPHP Utilisation de la validation JWT dans ThinkPHP6

Utilisation de la validation JWT dans ThinkPHP6

Jun 20, 2023 pm 11:36 PM
thinkphp 编程 jwt验证

Avec le développement d'Internet, le nombre d'utilisateurs d'applications Web a progressivement augmenté, et les enjeux de sécurité sont devenus de plus en plus importants. L'authentification est un élément important de la sécurité des applications Web, car seuls les utilisateurs authentifiés peuvent accéder aux ressources nécessitant des autorisations.

JSON Web Token (JWT) est un jeton d'authentification léger et autonome qui constitue un excellent moyen de transférer en toute sécurité des informations entre des applications Web. Le schéma d'authentification JWT convient aux systèmes distribués et aux applications monopage.

ThinkPHP est un framework PHP populaire qui fournit de nombreux outils pour développer des applications Web sécurisées. Dans cet article, nous expliquerons comment utiliser JWT pour l'authentification dans ThinkPHP6 afin d'améliorer la sécurité de votre application.

Environnement de développement et dépendances

Avant de commencer, nous devons nous assurer que l'environnement de développement a été correctement configuré. Voici les environnements et dépendances utilisés dans cet article. Veuillez modifier en conséquence en fonction de vos besoins.

  • PHP 7.2 ou supérieur
  • ThinkPHP 6.0.0 ou supérieur
  • Bibliothèque PHP Firebase JWT

Étape 1 : Installer la bibliothèque PHP Firebase JWT

L'installation de la bibliothèque PHP Firebase JWT est la première étape pour utiliser le schéma d'authentification JWT. Cette bibliothèque nous aidera à créer, signer et vérifier des JWT.

Nous pouvons installer la bibliothèque PHP Firebase JWT en utilisant Composer. Saisissez la commande suivante dans la ligne de commande :

composer require firebase/php-jwt
Copier après la connexion

Étape 2 : Créer une classe Token

Afin de faciliter la gestion et l'utilisation de JWT, nous créons une classe nommée Token pour gérer la vérification JWT sous tous ses aspects. Cette classe comprendra des fonctions telles que la création de jetons, la vérification des jetons et l'obtention d'informations sur les jetons.

Créez le fichier Token.php dans le répertoire app/common et ajoutez le code suivant :

<?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;
    }
}
Copier après la connexion

Dans le code, on utilise le FirebaseJWTJWT bibliothèque Les méthodes encode() et decode() sont utilisées pour créer et analyser JWT. $key est la clé que nous utilisons pour signer le JWT, et $alg est l'algorithme que nous choisissons. Dans la méthode createToken(), nous utilisons les quatre clés (iss, iat, exp et sub) de la charge utile JWT et ajoutons des données personnalisées. Le paramètre $expiration spécifie le délai d'expiration du JWT. Par conséquent, JWT ne peut être utilisé que pendant la période de validité. 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']);
        }
    }
}
Copier après la connexion

在此中间件中,我们使用 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);
});
Copier après la connexion

请注意,在此路由中,我们将Jwt中间件作为参数传递给middleware()方法。这是UserController中的getUserInfo()方法的示例代码。

<?php

namespace appcontroller;

use appcommonToken;

class UserController
{
    public function getUserInfo()
    {
        $data = request()->data;
        ...
    }
    ...
}
Copier après la connexion

在控制器中,您可以通过调用$request->data

Étape 3 : Vérifiez le jeton dans le middleware

Maintenant que nous avons créé la classe Token pour gérer le travail lié à JWT, nous devons vérifier l'utilisateur JWT dans le middleware. L'utilisation d'un middleware facilite l'interception et la définition des réponses dans le code du contrôleur de votre application, et vous pouvez séparer le code en différentes classes pour une meilleure gestion et modification.

Créez le fichier Jwt.php dans le répertoire app/middleware et ajoutez le code suivant :

rrreee

Dans ce middleware, nous utilisons verifyToken dans la classe Token ( ) pour vérifier le JWT. Cette méthode renverra vrai ou faux indiquant si le jeton est valide. Si elle est valide, nous utiliserons la méthode getDataByToken() pour obtenir la partie données du JWT et la stockerons dans $request->data. Ces données sont ensuite disponibles pour le responsable du traitement.

Étape 4 : Configurer les routes #🎜🎜##🎜🎜#Maintenant que nous avons créé le middleware, nous devons l'appliquer aux routes appropriées. #🎜🎜##🎜🎜# En supposant que nous souhaitons protéger la route de /api/user, nous devons définir la route dans le fichier route pi.php comme suit : # 🎜🎜#rrreee#🎜🎜#Veuillez noter que dans cette route, nous passons le middleware Jwt en paramètre à la méthode middleware(). Ceci est l'exemple de code pour la méthode getUserInfo() dans UserController. #🎜🎜#rrreee#🎜🎜#Dans le contrôleur, vous pouvez accéder aux données stockées dans le JWT authentifié en appelant $request->data. #🎜🎜##🎜🎜#Conclusion#🎜🎜##🎜🎜#La méthode d'authentification JWT peut rendre votre application Web plus sécurisée et fiable. Dans cet article, nous avons expliqué comment utiliser la bibliothèque PHP Firebase JWT pour créer et valider des JWT dans ThinkPHP6. #🎜🎜##🎜🎜# Nous avons créé une classe appelée Token, qui est utilisée pour gérer le travail lié à JWT, et ajouté un middleware pour valider JWT et définir les données. Enfin, nous configurons le code de routage et de contrôleur qui utilise ce middleware pour accéder aux données stockées dans le JWT. #🎜🎜##🎜🎜#L'objectif principal de l'introduction de l'authentification JWT est de garantir que les ressources de l'application ne peuvent être utilisées que par des utilisateurs authentifiés. J'espère que cet article vous a aidé à comprendre comment utiliser l'authentification JWT pour sécuriser votre application ! #🎜🎜#

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Supprimez les valeurs en double du tableau PHP à l'aide d'expressions régulières Supprimez les valeurs en double du tableau PHP à l'aide d'expressions régulières Apr 26, 2024 pm 04:33 PM

Comment supprimer les valeurs en double du tableau PHP à l'aide d'expressions régulières : utilisez l'expression régulière /(.*)(.+)/i pour faire correspondre et remplacer les doublons. Parcourez les éléments du tableau et vérifiez les correspondances à l'aide de preg_match. S'il y a une correspondance, ignorez la valeur ; sinon, ajoutez-la à un nouveau tableau sans valeurs en double.

A quoi sert la programmation et à quoi sert de l'apprendre ? A quoi sert la programmation et à quoi sert de l'apprendre ? Apr 28, 2024 pm 01:34 PM

1. La programmation peut être utilisée pour développer divers logiciels et applications, notamment des sites Web, des applications mobiles, des jeux et des outils d'analyse de données. Ses domaines d'application sont très larges, couvrant presque tous les secteurs, notamment la recherche scientifique, la santé, la finance, l'éducation, le divertissement, etc. 2. L'apprentissage de la programmation peut nous aider à améliorer nos compétences en résolution de problèmes et nos capacités de réflexion logique. Lors de la programmation, nous devons analyser et comprendre les problèmes, trouver des solutions et les traduire en code. Cette façon de penser peut cultiver nos capacités analytiques et abstraites et améliorer notre capacité à résoudre des problèmes pratiques.

La clé du codage : libérer la puissance de Python pour les débutants La clé du codage : libérer la puissance de Python pour les débutants Oct 11, 2024 pm 12:17 PM

Python est un langage d'introduction à la programmation idéal pour les débutants grâce à sa facilité d'apprentissage et ses fonctionnalités puissantes. Ses bases incluent : Variables : utilisées pour stocker des données (nombres, chaînes, listes, etc.). Type de données : Définit le type de données dans la variable (entier, virgule flottante, etc.). Opérateurs : utilisés pour les opérations mathématiques et les comparaisons. Flux de contrôle : contrôlez le flux d'exécution du code (instructions conditionnelles, boucles).

Résolution de problèmes avec Python : débloquez des solutions puissantes en tant que codeur débutant Résolution de problèmes avec Python : débloquez des solutions puissantes en tant que codeur débutant Oct 11, 2024 pm 08:58 PM

Python permet aux débutants de résoudre des problèmes. Sa syntaxe conviviale, sa bibliothèque complète et ses fonctionnalités telles que les variables, les instructions conditionnelles et les boucles permettent un développement de code efficace. De la gestion des données au contrôle du flux du programme et à l'exécution de tâches répétitives, Python fournit

Collection d'énigmes de programmation C++ : stimule la réflexion et améliore les compétences en programmation Collection d'énigmes de programmation C++ : stimule la réflexion et améliore les compétences en programmation Jun 01, 2024 pm 10:26 PM

Les énigmes de programmation C++ couvrent les concepts d'algorithme et de structure de données tels que la séquence de Fibonacci, la factorielle, la distance de Hamming, les valeurs maximales et minimales des tableaux, etc. En résolvant ces énigmes, vous pouvez consolider vos connaissances en C++ et améliorer la compréhension des algorithmes et vos compétences en programmation.

Démystifier C : un chemin clair et simple pour les nouveaux programmeurs Démystifier C : un chemin clair et simple pour les nouveaux programmeurs Oct 11, 2024 pm 10:47 PM

C est un choix idéal pour les débutants qui souhaitent apprendre la programmation système. Il contient les composants suivants : fichiers d'en-tête, fonctions et fonctions principales. Un simple programme C capable d'imprimer "HelloWorld" a besoin d'un fichier d'en-tête contenant la déclaration de fonction d'entrée/sortie standard et utilise la fonction printf dans la fonction principale pour imprimer. Les programmes C peuvent être compilés et exécutés à l'aide du compilateur GCC. Après avoir maîtrisé les bases, vous pouvez passer à des sujets tels que les types de données, les fonctions, les tableaux et la gestion des fichiers pour devenir un programmeur C compétent.

Comment résoudre le problème de l'erreur de curl 77 lors de la connexion à Elasticsearch 8 en utilisant les clients ThinkPhp6 et Elasticsearch-PHP? Comment résoudre le problème de l'erreur de curl 77 lors de la connexion à Elasticsearch 8 en utilisant les clients ThinkPhp6 et Elasticsearch-PHP? Mar 31, 2025 pm 11:36 PM

Utilisation du framework ThinkPhp6 combiné avec le client Elasticsearch-PHP pour faire fonctionner Elasticsearch ...

Utilisez le mécanisme d'emballage et de déroulement des erreurs de Golang pour la gestion des erreurs Utilisez le mécanisme d'emballage et de déroulement des erreurs de Golang pour la gestion des erreurs Apr 25, 2024 am 08:15 AM

La gestion des erreurs dans Go inclut les erreurs d’encapsulage et les erreurs de déballage. L'encapsulation des erreurs permet d'encapsuler un type d'erreur avec un autre, fournissant ainsi un contexte plus riche pour l'erreur. Développez les erreurs et parcourez la chaîne d'erreurs imbriquée pour trouver l'erreur de niveau le plus bas pour un débogage facile. En combinant ces deux technologies, les conditions d'erreur peuvent être gérées efficacement, offrant un contexte d'erreur plus riche et de meilleures capacités de débogage.

See all articles