cdvo / filament-utilities
A laravel package for CDVO to manage filament utilities.
Requires
- php: ^8.1
- filament/filament: ^4.0
- firebase/php-jwt: ^7.0
Requires (Dev)
- orchestra/testbench: ^10.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
- dev-master
- 1.3.1
- 1.3.0
- 1.2.15
- 1.2.14
- 1.2.13
- 1.2.12
- 1.2.11
- 1.2.10
- 1.2.9
- 1.2.8
- 1.2.7
- 1.2.6
- 1.2.5
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.11
- 1.0.10
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-feature/impersonation-jwt
- dev-feature/laravel_13
- dev-feature/269-aproxi
- dev-bugfix/notification
- dev-bugfix/258-errors
- dev-feature/view-and-assets
This package is auto-updated.
Last update: 2026-10-08 12:16:02 UTC
README
This package is designed to facilitate the integration of SSO (Single Sign-On) authentication in your Laravel application. It provides a middleware that checks if the user is authenticated via SSO and redirects them to the appropriate login page if not.
Installation
composer require cdvo/filament-utilities
Publish assets
php artisan vendor:publish --tag=cdvo-assets
Render exceptions
Set up the exceptions views in the bootstrap/app.php file
->withExceptions(function (Exceptions $exceptions) {
$exceptions->render(function (Throwable $e, $request) {
$status = $e instanceof \Symfony\Component\HttpKernel\Exception\HttpExceptionInterface
? $e->getStatusCode()
: 500;
if (view()->exists("sso::errors.{$status}")) {
return response()->view("sso::errors.{$status}", [
'exception' => $e,
], $status);
}
return null; // fallback to default
});
Set up the SSO middleware
Add the middleware in the bootstrap/app.php file
->withMiddleware(function (Middleware $middleware) {
$middleware->append(\Cdvo\FilamentUtilities\Middleware\AuthenticateSSO::class);
})
Register the logout response
Register the LogoutResponse in the app/providers/AppServiceProvider.php file
use Cdvo\FilamentUtilities\Responses\LogoutResponse;
use Filament\Http\Responses\Auth\Contracts\LogoutResponse as LogoutResponseContract;
public function register(){
$this->app->bind(LogoutResponseContract::class, LogoutResponse::class);
}
Update the .env file
Add the following lines to your .env file:
APP_URL=
APP_URL_CD=
Connexion « en tant que » (impersonation)
Permet d'ouvrir la session d'un agent sans disposer de ses identifiants, via un token JWT à usage unique passé en paramètre d'URL sur une route placée hors du middleware SSO.
Installation dans une application
php artisan migrate
Dans le PanelProvider :
use Cdvo\FilamentUtilities\Filament\ImpersonationPlugin;
->plugins([
ImpersonationPlugin::make()->navigationGroup('Super Administration'),
])
Dans la ressource Utilisateurs :
use Cdvo\FilamentUtilities\Filament\Actions\ImpersonateAction;
->recordActions([
ImpersonateAction::make(),
// ...
])
Génération d'un lien en ligne de commande
php artisan cdvo:impersonate agent@exemple.fr
Paramétrage
La page « Connexion « en tant que » » du backoffice (réservée aux rôles listés
dans cdvo-impersonation.settings_roles) expose :
| Paramètre | Défaut |
|---|---|
| Activation globale | Désactivé — la route répond 404 |
| Durée de vie du token | 5 minutes (borne haute : max_ttl_minutes) |
| Rôles habilités à générer un token | Super administrateur |
| Secret JWT | Généré aléatoirement, régénérable |
Le reste est en configuration (config/cdvo-impersonation.php) : chemin de la
route, destination après consommation, rôles protégés (jamais impersonables),
limitation de débit.
Sortie de session
Le bandeau porte un bouton « Revenir sur opérateur » : l'identité de l'opérateur est mémorisée à l'ouverture de la session « en tant que » et restaurée à la sortie, sans repasser par la page de connexion. Si le lien a été ouvert hors d'une session d'opérateur (génération en ligne de commande dans un navigateur vierge), le bouton déconnecte simplement. La sortie est journalisée.
Articulation avec le SSO
AuthenticateSSO est enregistré en middleware global, donc exécuté avant
StartSession : il ne peut pas détecter qu'une session « en tant que » est en
cours et réauthentifie l'opérateur à partir de l'en-tête HTTP mail à chaque
requête. Le middleware RestoreImpersonation rétablit la cible après
l'ouverture de session ; il est enregistré automatiquement par le plugin sur le
panel (y compris pour les requêtes Livewire) et sur le groupe web par le
service provider. Aucune action n'est requise côté application.
Sécurité
Le dispositif repose sur la combinaison suivante ; aucune mesure n'est optionnelle :
- signature HS256 avec un secret de 256 bits dédié, stocké chiffré en base,
distinct d'
APP_KEY; - rotation du secret depuis le backoffice ou par commande
(
cdvo:impersonation:rotate-secret), qui invalide instantanément tous les tokens émis — c'est le mécanisme de révocation d'urgence ; - durée de vie courte (5 minutes par défaut) ;
- usage unique : le
jtiest persisté et marqué consommé de façon atomique ; - interrupteur maître : désactivé, la route répond 404 ;
- habilitation à la génération par rôle, comptes à privilèges élevés exclus des cibles ;
- journalisation de chaque émission et de chaque consommation (succès comme
rejet, avec sa cause, l'adresse IP et le user-agent) dans
cdvo_impersonation_tokenset dans les logs applicatifs ; - bandeau « Session en tant que X » pendant toute la durée de la session ;
- limitation de débit sur la route (5 requêtes/minute par défaut).
La purge de la piste d'audit se fait via cdvo:impersonation:prune --days=365.
Tests
composer install
vendor/bin/phpunit