enzoaccardo / ci4-adminkit-mfa
MFA (TOTP + WebAuthn/Passkey + recovery codes) per ci4-adminkit: servizi, flusso front, model, migrazioni. Viste dal tema ci4-adminkit-adminlte4.
Requires
- php: ^8.2
- bacon/bacon-qr-code: ^3.0
- codeigniter4/framework: ^4.7
- enzoaccardo/ci4-adminkit: ^0.1
- paragonie/constant_time_encoding: ^2.6 || ^3.0
- pragmarx/google2fa: ^9.0
- web-auth/webauthn-lib: ^5.3
Suggests
- enzoaccardo/ci4-adminkit-adminlte4: Tema AdminLTE 4: viste auth stilizzate per il flusso MFA (altrimenti viste minimali)
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.