JWT (JSON Web Token) est une norme ouverte (RFC 7519) utilisée pour transférer en toute sécurité les jetons dans les applications réseau. Il est largement utilisé dans l'authentification de l'identité utilisateur et la gestion des autorisations. En tant que cadre PHP populaire, ThinkPhp6 fournit un support de composants riche, qui facilite les développeurs pour intégrer les fonctions de certification JWT. Cet article expliquera progressivement comment implémenter l'authentification JWT dans ThinkPhp6.
Tout d'abord, vous devez installer des bibliothèques d'extensions liées à JWT via Composer. Entrez le répertoire racine du projet et exécutez la commande suivante dans le terminal:
<span class="fun">Le compositeur nécessite Firebase / PHP-JWT</span>
Une fois l'installation terminée, créez ou modifiez le fichier jwt.php dans le répertoire de configuration de ThinkPhp6 et configurez le contenu suivant:
return [
'secret' => 'your_secret_key',
'algorithm' => 'HS256',
];
Parmi eux, le secret est la clé utilisée pour la signature, il est recommandé de définir une chaîne aléatoire, et l'algorithme est un algorithme de chiffrement, avec HS256, HS384 ou HS512 en option.
Authentification Middleware est utilisée pour vérifier le jeton JWT avant que la demande n'atteigne le contrôleur. Utilisez la commande pour générer rapidement du middleware:
<span class="fun">php Think Make: middleware jwtmiddleware</span>
Cette commande générera un fichier de classe JWTMiddleware dans le répertoire APP / Middleware .
Ouvrez le fichier jwtmiddleware et complétez le code d'authentification:
use think\facade\Request;
use think\facade\Response;
use Firebase\JWT\JWT;
class JwtMiddleware
{
public function handle($request, \Closure $next)
{
$token = Request::header('Authorization');
if (empty($token)) {
return Response::create('Unauthorized', '401');
}
try {
JWT::decode($token, config('jwt.secret'), [config('jwt.algorithm')]);
} catch (\Exception $e) {
return Response::create('Invalid token', '401');
}
return $next($request);
}
}
Dans le code, obtenez d'abord le jeton JWT à partir de l'en-tête de demande, et s'il est vide, il renvoie une erreur 401; Vérifiez ensuite la légitimité du jeton, et s'il échoue, il renvoie également 401; Une fois la vérification adoptée, la demande suivante continuera d'être exécutée.
Dans Route / Route.php , ajoutez le middleware à l'itinéraire qui nécessite une authentification:
\think\Route::group(function () {
// Les voies qui nécessitent une authentification
})->middleware(\app\middleware\JwtMiddleware::class);
Vous pouvez également déclarer des middleware dans les annotations de classe de contrôleur:
namespace app\controller;
use think\annotation\route\Post;
use app\middleware\JwtMiddleware;
/**
* @route("auth")
* @middleware(JwtMiddleware::class)
*/
class AuthController
{
// Code de contrôleur
}
De cette façon, tous les itinéraires du contrôleur passeront automatiquement le middleware d'authentification JWT.
Une fois la configuration terminée, utilisez Postman ou d'autres outils de test d'interface pour envoyer une demande avec un jeton JWT valide pour vérifier que l'interface répond normalement. Lorsqu'un jeton non valide ou manquant, une erreur non autorisée 401 doit être renvoyée.
Cet article décrit comment intégrer l'authentification JWT dans le cadre ThinkPhp6. Il couvre le processus complet de l'installation, de la configuration, de la création et de l'application de middleware d'authentification, ainsi que des tests d'interface. En mettant en œuvre l'authentification JWT, la sécurité de l'application peut être améliorée et une gestion efficace de l'identité des utilisateurs peut être réalisée.