PHPackages                             moko-github/kerberos-auth - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Authentication &amp; Authorization](/categories/authentication)
4. /
5. moko-github/kerberos-auth

ActiveLibrary[Authentication &amp; Authorization](/categories/authentication)

moko-github/kerberos-auth
=========================

Kerberos SSO authentication package for Laravel (REMOTE\_USER, demande d'acces, mode simulation)

v2.0.2(1mo ago)09↓88.9%1proprietaryPHPPHP ^8.2CI passing

Since May 27Pushed 1mo agoCompare

[ Source](https://github.com/moko-github/kerberos-auth)[ Packagist](https://packagist.org/packages/moko-github/kerberos-auth)[ RSS](/packages/moko-github-kerberos-auth/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (9)Versions (13)Used By (1)

kerberos-auth
=============

[](#kerberos-auth)

Package Laravel d'authentification SSO Kerberos via la variable serveur `REMOTE_USER`.

Fonctionnalités
---------------

[](#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

---

Prérequis
---------

[](#prérequis)

Sur votre modèle utilisateur et votre application :

- **Trait `Illuminate\Notifications\Notifiable`** sur le modèle User — requis pour l'envoi des notifications admin (nouvelle demande d'accès, tentative inconnue).
- **Table `notifications`** migrée (`php artisan notifications:table && php artisan migrate`) — la notification de nouvelle demande d'accès utilise le canal `database`.
- **Colonne `remember_token`** sur la table `users` (présente par défaut dans Laravel) si `kerberos.remember_login` est à `true` (défaut). Sinon, passez-la à `false`.
- **Un worker de file d'attente** (`php artisan queue:work`) — les notifications implémentent `ShouldQueue` et sont poussées sur la file `notifications`.
- **Routes nommées** `dashboard` et `login` (ou configurées via `kerberos.redirects`, voir Configuration).

---

Installation
------------

[](#installation)

### 1. Dévelopement sur le package avec dependance projet, déclarer le dépôt dans `composer.json`

[](#1-dévelopement-sur-le-package-avec-dependance-projet-déclarer-le-dépôt-dans-composerjson)

**Développement (chemin local) :**

```
{
    "repositories": [
        {
            "type": "path",
            "url": "/chemin/vers/kerberos-auth",
            "options": { "symlink": true }
        }
    ]
}
```

### 2. Installer le package

[](#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

[](#3-lancer-linstallateur)

```
php artisan kerberos:install
```

Sans option, la commande pose deux questions interactives. Sans réponse, les valeurs par défaut (entre crochets) s'appliquent.

```
◆ Installation de l'authentification Kerberos...
  ● Installer le système de rôles ? (table roles + colonne role_id sur users) (yes/no) [yes]
  ...migrations...
  ● Exécuter les seeders Kerberos ? (yes/no) [yes]

```

La question sur les rôles est posée **avant** les migrations, ce qui garantit que la colonne `role_id` n'est ajoutée à la table `users` que si vous en avez besoin.

Cette commande effectue automatiquement :

- Ajout des middlewares dans `bootstrap/app.php`
- Ajout du champ `kerberos` (et `role_id` si rôles activés) 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

[](#options-de-la-commande)

OptionEffet*(aucune)*Questions interactives`--no-roles`Ignore le système de rôles (migration `roles` + `role_id` + `RolesSeeder`)`--no-seed`Ignore **tous** les seeders sans poser de question (les migrations s'exécutent quand même)```
php artisan kerberos:install --no-roles   # sans système de rôles
php artisan kerberos:install --no-seed    # migrations uniquement, sans seeders
```

> Les flags ont la priorité sur les clés de config `install.run_seeders` et `install.seed_roles`.

---

Seeders
-------

[](#seeders)

### RolesSeeder

[](#rolesseeder)

Crée deux rôles en base : **Admin** et **User**.

Exécuté uniquement si vous avez répondu **oui** à la question sur le système de rôles (ou si `--no-roles` n'est pas passé). À ignorer si vous utilisez un autre système de rôles (Spatie Permission, rôles personnalisés, etc.).

### KerberosSetupSeeder

[](#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
-------------

[](#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.

### Modèle utilisateur

[](#modèle-utilisateur)

Le package ne présume **pas** que votre modèle utilisateur est `App\Models\User`. Il le résout automatiquement dans cet ordre :

1. `config('kerberos.user_model')` (override explicite)
2. `config('auth.providers.users.model')` (défaut Laravel)
3. `App\Models\User` (dernier recours)

Aucune configuration n'est nécessaire dans la majorité des cas. Pour forcer un modèle spécifique :

```
// config/kerberos.php
'user_model' => \App\Models\Account::class,
```

### Routes de redirection

[](#routes-de-redirection)

Le package redirige vers des routes nommées de votre application. Par défaut `dashboard` (après login réussi) et `login` (accès refusé, fin de simulation, etc.). Si vos routes portent d'autres noms :

```
// config/kerberos.php
'redirects' => [
    'success' => 'home',        // après authentification réussie
    'login'   => 'auth.login',  // route de connexion / fallback
],
```

ou via `.env` : `KERBEROS_SUCCESS_ROUTE` et `KERBEROS_LOGIN_ROUTE`.

### Variables d'environnement

[](#variables-denvironnement)

```
KERBEROS_ENABLED=false                    # Active l'authentification Kerberos
KERBEROS_SERVER_VAR=REMOTE_USER           # Variable serveur contenant le principal
KERBEROS_FALLBACK_AUTH=true               # true = login classique en secours ; false = Kerberos strict (403 sans ticket)
KERBEROS_SIMULATION_MODE=false            # Active le mode simulation (dév uniquement)
KERBEROS_ADMIN_ROLE=Admin                 # Nom du rôle admin (destinataires des notifications)
KERBEROS_ADMIN_EMAILS=                    # Emails admins (virgule). Si renseigné, notifie ces adresses ; sinon les users du rôle admin
KERBEROS_ADMIN_NOTIFICATION_MODE=immediate # 'immediate' ou 'disabled'
KERBEROS_AUTO_CLEANUP_DAYS=30             # Rétention des tentatives en jours
KERBEROS_ALLOWED_DOMAINS=                 # (non implémenté — réservé multi-realm)
```

> **`KERBEROS_FALLBACK_AUTH=false`** impose Kerberos : une requête sans ticket reçoit un `403`. Avec `true` (défaut), l'utilisateur sans ticket atteint le formulaire de connexion classique de votre application.
>
> **Notifications admin :** avec `KERBEROS_ADMIN_EMAILS` renseigné, les emails sont envoyés directement à ces adresses (mail on-demand, même sans compte User). Sinon, les utilisateurs portant le rôle `KERBEROS_ADMIN_ROLE` sont notifiés. Si vous utilisez une stratégie de rôle `relation` / `callable`, privilégiez `KERBEROS_ADMIN_EMAILS`.

### Routes exclues

[](#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

[](#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

[](#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)*

[](#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èsCas 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'`

[](#strategy-relation)

```
'role_check' => [
    'strategy' => 'relation',
    'relation' => 'roles',
],
```

#### `strategy: 'callable'`

[](#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)

[](#seeders-via-config)

```
'install' => [
    'run_seeders' => false,
    'seed_roles'  => false,
],
```

---

Composants Livewire
-------------------

[](#composants-livewire)

### ``

[](#livewireauthaccess-denied-)

Affiché quand un identifiant Kerberos est **inconnu** du système. **Route :** `GET /acces-refuse` → `access-denied`

### ``

[](#livewireauthrequest-access-)

Formulaire pour les utilisateurs **reconnus mais sans rôle**. **Route :** `GET /demande-acces` → `access-request.create`

### ``

[](#livewireauthsimulate-kerberos-)

Interface de simulation réservée au développement. **Prérequis :** `KERBEROS_SIMULATION_MODE=true`.

```

```

### ``

[](#livewireauthsimulation-banner-)

Bannière visible quand une simulation est active. **À placer dans le layout principal.**

```

```

---

Personnalisation des vues
-------------------------

[](#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

```

---

Internationalisation (i18n)
---------------------------

[](#internationalisation-i18n)

Le package embarque des fichiers de traduction pour **l'anglais** (`en`) et le **français** (`fr`). Par défaut, Laravel utilise la locale de `config('app.locale')`.

### Passer le package en français

[](#passer-le-package-en-français)

Dans `config/app.php` :

```
'locale' => 'fr',
'fallback_locale' => 'en',
```

Toutes les chaînes du package (notifications mail, messages flash, validation, vues Blade) s'afficheront automatiquement en français.

### Publier et personnaliser les traductions

[](#publier-et-personnaliser-les-traductions)

```
php artisan vendor:publish --tag=kerberos-lang
```

Copie dans `lang/vendor/kerberos-auth/` :

```
├── en/
│   └── kerberos.php
└── fr/
    └── kerberos.php

```

Les fichiers publiés prennent le dessus sur ceux du package. Modifiez-les pour adapter les messages à votre contexte (ton, vocabulaire interne, langue tierce).

> **Note :** Les traductions du package sont chargées sous le namespace `kerberos-auth`. Les clés suivent la structure `kerberos-auth::kerberos..`, par exemple `kerberos-auth::kerberos.flash.simulation_disabled`.

---

Développement &amp; tests
-------------------------

[](#développement--tests)

```
composer install
composer test          # tests Pest
composer analyse       # analyse statique PHPStan (niveau 5)
composer format        # formatage Laravel Pint
composer format:test   # vérifie le formatage sans modifier
```

Les tests s'appuient sur Orchestra Testbench + Pest, avec une base SQLite en mémoire et un modèle utilisateur de fixture (`tests/Fixtures/User.php`). La CI (`.github/workflows/ci.yml`) exécute Pint, PHPStan et Pest sur PHP 8.2 / 8.3 / 8.4.

---

Mise à jour
-----------

[](#mise-à-jour)

```
composer update moko-github/kerberos-auth
php artisan migrate
```

---

Commandes artisan
-----------------

[](#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
--------------------------

[](#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
php artisan vendor:publish --tag=kerberos-lang     # traductions EN/FR
```

###  Health Score

41

—

FairBetter than 87% of packages

Maintenance90

Actively maintained with recent releases

Popularity4

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 64.1% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

8

Last Release

46d ago

Major Versions

v1.0.4 → v2.0.02026-06-03

### Community

Maintainers

![](https://www.gravatar.com/avatar/e86133cee7cb105f8a66c2594e77cc2cc96962f20a3e7c2be7c5f9d42b994bed?d=identicon)[moko-github](/maintainers/moko-github)

---

Top Contributors

[![moko-github](https://avatars.githubusercontent.com/u/62236867?v=4)](https://github.com/moko-github "moko-github (25 commits)")[![claude](https://avatars.githubusercontent.com/u/81847?v=4)](https://github.com/claude "claude (14 commits)")

---

Tags

laravelAuthenticationSSOsingle sign onkerberosremote-user

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/moko-github-kerberos-auth/health.svg)

```
[![Health](https://phpackages.com/badges/moko-github-kerberos-auth/health.svg)](https://phpackages.com/packages/moko-github-kerberos-auth)
```

###  Alternatives

[nasirkhan/laravel-starter

A CMS like modular Laravel starter project.

1.4k2.7k](/packages/nasirkhan-laravel-starter)[team-nifty-gmbh/tall-datatables

Server-side rendered datatables for Laravel and Livewire

1320.9k4](/packages/team-nifty-gmbh-tall-datatables)[tomshaw/electricgrid

A feature-rich Livewire package designed for projects that require dynamic, interactive data tables.

119.4k](/packages/tomshaw-electricgrid)[maicol07/laravel-oidc-client

OpenID Connect Client for Laravel

281.3k](/packages/maicol07-laravel-oidc-client)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
