moko-github / kerberos-auth
Kerberos SSO authentication package for Laravel (REMOTE_USER, demande d'acces, mode simulation)
Requires
- php: ^8.2
- laravel/framework: ^12.0
- livewire/livewire: ^3.0|^4.0
README
Package Laravel d'authentification SSO Kerberos via la variable serveur REMOTE_USER.
Fonctionnalités
- Authentification automatique via
REMOTE_USER(Apache/Nginx Kerberos) - Gestion des demandes d'accès pour les comptes sans rôle
- Mode simulation pour les environnements de développement
- Composants Livewire inclus (access-denied, request-access, simulate-kerberos, simulation-banner)
- Migrations, seeders et commandes artisan inclus
Installation
1. Déclarer le dépôt dans composer.json
Production (dépôt VCS privé) :
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/moko-github/kerberos-auth"
}
]
}
Développement (chemin local) :
{
"repositories": [
{
"type": "path",
"url": "/chemin/vers/kerberos-auth",
"options": { "symlink": true }
}
]
}
2. Installer le package
# Production composer require moko-github/kerberos-auth # Développement (path local, pas encore de tag) composer require moko-github/kerberos-auth:@dev
3. Lancer l'installateur
php artisan kerberos:install
Sans option, la commande pose des questions interactives pour les seeders. Sans réponse, les valeurs par défaut (entre crochets) s'appliquent.
◆ Installation de l'authentification Kerberos...
● Exécuter les seeders Kerberos ? (yes/no) [yes]
● Inclure le RolesSeeder (crée les rôles Admin et User) ? (yes/no) [yes]
Cette commande effectue automatiquement :
- Ajout des middlewares dans
bootstrap/app.php - Ajout des champs
kerberosetrole_iddansapp/Models/User.php - Ajout des routes dans
routes/web.php - Configuration du scheduler dans
routes/console.php - Ajout des variables d'environnement dans
.env - Exécution des migrations et des seeders (selon les réponses)
Toutes les étapes sont idempotentes : relancer
kerberos:installne duplique rien. Si une injection automatique échoue, un message⚠indique les lignes à ajouter manuellement.
Options de la commande
| Option | Effet |
|---|---|
| (aucune) | Questions interactives pour les seeders |
--no-seed |
Ignore tous les seeders sans poser de question |
--no-roles |
Ignore uniquement le RolesSeeder sans poser de question |
php artisan kerberos:install --no-seed # migrations uniquement php artisan kerberos:install --no-roles # migrations + KerberosSetupSeeder uniquement
Les flags ont la priorité sur les clés de config
install.run_seedersetinstall.seed_roles.
Seeders
RolesSeeder
Crée deux rôles en base : Admin et User.
À utiliser si votre application s'appuie sur le système de rôles fourni par ce package (MokoGithub\KerberosAuth\Models\Role). À ignorer (--no-roles) si vous utilisez un autre système de rôles (Spatie Permission, rôles personnalisés, etc.).
KerberosSetupSeeder
Crée un compte administrateur de test (admin@example.com / password) avec l'identifiant Kerberos admin@krb.example.com, et assigne le rôle User aux utilisateurs existants sans rôle.
À utiliser pour initialiser la base lors d'une première installation. À ignorer (--no-seed) si vous gérez vos propres données initiales.
Note : si
App\Enums\UserStatusexiste dans l'application, le compte admin est créé avec le statutACTIVE.
Configuration
Publiez le fichier de configuration pour le personnaliser :
php artisan vendor:publish --tag=kerberos-config
Cela crée config/kerberos.php dans votre application.
Variables d'environnement
KERBEROS_ENABLED=false # Active l'authentification Kerberos KERBEROS_SERVER_VAR=REMOTE_USER # Variable serveur contenant le principal KERBEROS_FALLBACK_AUTH=true # Autorise la connexion classique en fallback KERBEROS_SIMULATION_MODE=false # Active le mode simulation (dév uniquement) KERBEROS_ADMIN_EMAILS= # Emails admins (séparés par virgule) KERBEROS_ADMIN_NOTIFICATION_MODE=immediate # 'immediate' ou 'disabled' KERBEROS_AUTO_CLEANUP_DAYS=30 # Rétention des tentatives en jours KERBEROS_ALLOWED_DOMAINS= # Domaines autorisés (vide = tous)
Routes exclues
Par défaut, le middleware Kerberos exclut automatiquement ces routes :
access-denied, access-request.create, access-request.store, logout, livewire.*
Pour ajouter vos propres exclusions :
// config/kerberos.php 'excluded_routes' => [ 'admin.*', // toutes les routes d'admin 'api.*', // toutes les routes API 'webhook.pay', // une route spécifique ],
Layout des pages Kerberos
Les pages /demande-acces et /acces-refuse utilisent par défaut le layout minimal embarqué dans le package (kerberos-auth::layouts.guest) — une page blanche centrée qui ne nécessite que Tailwind CSS.
Pour utiliser le layout de votre application :
// config/kerberos.php 'layout' => 'layouts.auth', // layout Laravel standard 'layout' => 'components.layouts.app', // layout Livewire Volt 'layout' => 'layouts.guest', // votre propre layout guest
Pour personnaliser le layout du package :
php artisan vendor:publish --tag=kerberos-views
# → resources/views/vendor/kerberos-auth/layouts/guest.blade.php
Stratégie de vérification des rôles
Définit comment le package détermine qu'un utilisateur est autorisé à se connecter.
Un utilisateur qui échoue ce contrôle reçoit le statut NO_ROLE et est redirigé vers le formulaire de demande d'accès.
strategy: 'column' (défaut)
Vérifie une colonne du modèle User avec un opérateur.
'role_check' => [ 'strategy' => 'column', 'column' => 'role_id', // colonne à tester 'operator' => 'is_not_null', // 'is_not_null' (défaut) | 'is_null' ],
operator |
Condition d'accès | Cas d'usage typique |
|---|---|---|
is_not_null |
$user->role_id !== null |
Système mono-rôle (FK) |
is_null |
$user->deleted_at === null |
Soft-delete comme garde d'accès |
strategy: 'relation'
'role_check' => [ 'strategy' => 'relation', 'relation' => 'roles', ],
strategy: 'callable'
'role_check' => [ 'strategy' => 'callable', 'callable' => \App\Kerberos\MyAccessCheck::class, ],
La classe doit implémenter MokoGithub\KerberosAuth\Contracts\UserAccessCheckInterface :
class MyAccessCheck implements UserAccessCheckInterface { public function check(User $user): bool { return $user->deleted_at === null && $user->department !== 'EXTERN'; } }
Seeders (via config)
'install' => [ 'run_seeders' => false, 'seed_roles' => false, ],
Composants Livewire
<livewire:auth.access-denied />
Affiché quand un identifiant Kerberos est inconnu du système.
Route : GET /acces-refuse → access-denied
<livewire:auth.request-access />
Formulaire pour les utilisateurs reconnus mais sans rôle.
Route : GET /demande-acces → access-request.create
<livewire:auth.simulate-kerberos />
Interface de simulation réservée au développement. Prérequis : KERBEROS_SIMULATION_MODE=true.
<livewire:auth.simulate-kerberos />
<livewire:auth.simulation-banner />
Bannière visible quand une simulation est active. À placer dans le layout principal.
<livewire:auth.simulation-banner />
Personnalisation des vues
php artisan vendor:publish --tag=kerberos-views
Copie dans resources/views/vendor/kerberos-auth/ :
├── layouts/
│ └── guest.blade.php # layout par défaut des pages Kerberos
└── livewire/auth/
├── access-denied.blade.php
├── request-access.blade.php
├── simulate-kerberos.blade.php
└── simulation-banner.blade.php
Mise à jour
composer update moko-github/kerberos-auth php artisan migrate
Commandes artisan
php artisan kerberos:install # Installation initiale (interactif) php artisan kerberos:install --no-seed # Installation sans seeders php artisan kerberos:install --no-roles # Installation sans RolesSeeder php artisan kerberos:purge-attempts # Purge les tentatives anciennes
Publication des ressources
php artisan vendor:publish --tag=kerberos-config # config/kerberos.php php artisan vendor:publish --tag=kerberos-views # vues + layout guest php artisan vendor:publish --tag=kerberos-seeders # seeders