Search by

cdvo / filament-utilities

candrianarijaona

A laravel package for CDVO to manage filament utilities.

Package info

bitbucket.org/eaziweb95/app-cdvo

pkg:composer/cdvo/filament-utilities

Statistics

Installs: 1 476

Dependents: 0

Suggesters: 0

1.3.1 2026-10-08 12:15 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ètreDéfaut
Activation globaleDésactivé — la route répond 404
Durée de vie du token5 minutes (borne haute : max_ttl_minutes)
Rôles habilités à générer un tokenSuper administrateur
Secret JWTGé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 jti est 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_tokens et 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