enzoaccardo/ci4-adminkit-mfa

MFA (TOTP + WebAuthn/Passkey + recovery codes) per ci4-adminkit: servizi, flusso front, model, migrazioni. Viste dal tema ci4-adminkit-adminlte4.

Maintainers

Package info

github.com/enzoaccardo/ci4-adminkit-mfa

pkg:composer/enzoaccardo/ci4-adminkit-mfa

Transparency log

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v0.1.0 2026-06-11 07:30 UTC

This package is auto-updated.

Last update: 2026-07-28 22:08:53 UTC


README

Secondo fattore di autenticazione per i pannelli basati su ci4-adminkit: codice TOTP da app authenticator, passkey WebAuthn e codici di recupero.

Dipende solo dal kit. Il tema AdminLTE è consigliato ma non obbligatorio: se c'è, le schermate dell'MFA usano le sue viste; se manca, il pacchetto ne ha di proprie, essenziali ma funzionanti, e il flusso gira lo stesso.

Come si aggancia

Le rotte del flusso (setup, verifica, recupero, passkey) le registri con una riga:

\AdminKit\Routing\Discovery::discover($routes, 'AdminKit\Mfa\Controllers');

Nel tuo login, dopo aver controllato la password, chiedi al servizio se serve il secondo passaggio:

if (service('mfa')->isRequired($user)) {
    session()->set('mfa_pending', $user->mfa_secret ? 'verify' : 'setup');
    return redirect()->to($user->mfa_secret ? '/mfa/verify' : '/mfa/setup');
}

Il resto (QR per l'app authenticator, verifica del codice, generazione e controllo dei recovery code, ceremony della passkey) è già scritto.

Installazione

composer require enzoaccardo/ci4-adminkit-mfa
php spark migrate --all
php spark mfa:publish

Serve una tabella users con almeno id, email e name. Le colonne per l'MFA e le tabelle per recovery code e passkey le creano le migrazioni.

Sotto il cofano

TOTP con pragmarx/google2fa, il QR con bacon/bacon-qr-code, il WebAuthn con web-auth/webauthn-lib. I recovery code vengono salvati con l'hash, non in chiaro, e si consumano una volta sola. La configurazione (issuer mostrato nell'app, quale UserModel usare, dove reindirizzare) sta in Config\Mfa; rpId e origin della passkey in Config\Passkey, che se non li imposti li ricava dall'host.

Licenza

MIT. Vedi LICENSE.