Skip to content

moko-github/kerberos-auth

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

kerberos-auth

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 kerberos et role_id dans app/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:install ne 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_seeders et install.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\UserStatus existe dans l'application, le compte admin est créé avec le statut ACTIVE.


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-refuseaccess-denied

<livewire:auth.request-access />

Formulaire pour les utilisateurs reconnus mais sans rôle. Route : GET /demande-accesaccess-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

About

package pour faciliter l'authentification kerberos

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors