Skip to main content
Cet article s’appuie sur une analyse du code source (branche 1.x). Aucune documentation officielle n’existe encore et le package est en pré-release (à la date d’avril 2026).

Qu’est-ce que Sentinel ?

Laravel Sentinel est un package de middleware de sécurité qui contrôle l’accès aux routes via un pattern de drivers. Développé par Taylor Otwell et Mior Muhammad Zaki, il est compatible PHP ^8.0 et Laravel 8 à 13. Son usage principal est la protection des routes d’outils d’administration comme Telescope, Horizon ou Pulse. Il suffit d’appliquer SentinelMiddleware à une route pour contrôler l’accès selon la logique d’autorisation définie par le driver.

Comparaison avec l’approche classique

Telescope et Horizon disposent chacun d’un mécanisme d’autorisation basé sur des gate.
Ce mécanisme dépend de l’état d’authentification et pose problème quand « on n’est pas connecté, donc on ne peut pas décider ». En tant que middleware, Sentinel contrôle l’accès par requête, indépendamment de l’authentification. Il permet aussi de définir les règles en un seul endroit pour plusieurs outils d’administration.

Installation

SentinelServiceProvider est déclaré dans extra.laravel.providers du composer.json, il est donc détecté automatiquement. Aucun fichier de configuration à publier.

Architecture du package

Fonctionnement du driver par défaut (driver Laravel)

Le driver par défaut Laravel ne contrôle l’accès qu’en environnement local (APP_ENV=local).
Résumé du flux :
Le driver Laravel retourne toujours true (autorisé) en dehors de l’environnement local. Pour un contrôle d’accès en production, créez un driver personnalisé.

Détection d’IP privée

La méthode isPrivateIp() de la classe de base Driver utilise IpUtils de Symfony pour identifier les IP dans les plages suivantes comme privées.

Détection d’environnement Docker local

Considère l’environnement comme Docker local si REMOTE_ADDR vaut 127.0.0.1 et qu’un fichier .dockerenv existe à la racine du projet.

Utilisation comme middleware

Utilisation de base

Spécifier un driver

Passez le nom du driver en argument du middleware. Si le driver n’existe pas, un fallback vers le driver par défaut est effectué (comportement de driverOrFallback()).

Implémentation du middleware

Si authorize() retourne false, la requête est interrompue avec un HTTP 401. Driver::authorizeOrFail() permet également de lever une AuthorizationException (non utilisée par le middleware lui-même).

Créer un driver personnalisé

Étendez la classe abstraite Driver et implémentez la méthode authorize().
Enregistrez le driver dans AppServiceProvider::boot() ou équivalent.

Utiliser les méthodes utilitaires de la classe de base

La classe Driver propose des méthodes utiles (détection d’IP, etc.) réutilisables librement.

Fonctionnement de SentinelManager

SentinelManager étend Illuminate\Support\Manager. Manager est la classe de base Laravel qui implémente le pattern de drivers en résolvant l’instance via driver() avec mise en cache.
driverOrFallback() retombe silencieusement sur le driver par défaut si le driver spécifié n’est pas trouvé, ce qui permet de passer sans erreur un nom de driver inexistant en argument du middleware. SentinelManager est enregistré en singleton scopé (scoped) par SentinelServiceProvider : l’instance du driver est réutilisée durant une requête.

Conclusion

laravel/sentinel est un petit package, mais son utilisation de Illuminate\Support\Manager lui confère une bonne extensibilité. Le driver par défaut Laravel est spécialisé dans la prévention des accès via un service de tunneling en développement local ; pour protéger la production, il faut écrire un driver personnalisé. La documentation officielle, à venir, précisera les patrons d’utilisation.

Dépôt laravel/sentinel

Retrouvez le code source et les changements récents sur la branche 1.x du dépôt GitHub.
Dernière modification le 13 juillet 2026