Opätovné overenie
Prihlásený účet sa pred citlivými akciami znova preukáže. Potom jeho relácia platí ako nedávno overená počas reauthentication.timeout sekúnd (predvolene 900). Značka je v cache podľa guardu a relácie a zaznamenáva, ako sa relácia preukázala — nielen kedy.
'reauthentication' => [
'timeout' => 900,
'methods' => ['password', 'totp', 'recovery_code', 'passkey', 'email_otp'],
'require_second_factor_when_enrolled' => true, // 2FA/passkey accounts must reauth with totp|recovery_code|passkey
'fresh_login_counts' => true, // auth_time within timeout satisfies the check
'required_for' => ['enable_two_factor', 'disable_two_factor', 'regenerate_recovery_codes',
'register_passkey', 'remove_passkey', 'change_email', 'set_password', 'logout_everywhere'],
],Dostupné metódy
| Metóda | Ponúkne sa, keď |
|---|---|
password | Účet má heslo — a pri require_second_factor_when_enrolled nemá TOTP ani passkey. |
totp, recovery_code | 2FA režim nie je off a účet má zapnuté TOTP. |
passkey | Režim passkeys nie je off a účet má passkey. |
email_otp | Účty bez hesla, bez TOTP aj passkey, s e-mailovou adresou. |
Ukradnutá relácia spolu s uniknutým heslom preto nedokáže vypnúť faktor, ktorý účet chráni.
Opätovné overenie
Z PHP podkontext reauthentication() vypíše metódy účtu, potvrdí overenie a stráži váš vlastný kód — ensureRecent() a ensureFor() vyhodia ReauthenticationRequired. sendCode() pošle kód účtu bez hesla a passkeyOptions() spustí passkey ceremoniál:
use RoundlyConsulting\Auth\DataTransferObjects\ReauthenticationData;
use RoundlyConsulting\Auth\Enums\ReauthenticationMethod;
use RoundlyConsulting\Auth\Enums\SensitiveAction;
use RoundlyConsulting\Auth\Facades\Authentication;
$guard = Authentication::guard('users');
$reauth = $guard->reauthentication();
$current = $guard->tokenFrom($request);
$reauth->methods($user); // what this account may re-authenticate with
$until = $reauth->confirm($user, new ReauthenticationData(
method: ReauthenticationMethod::Totp,
current: $current,
context: $guard->contextFrom($request),
code: $request->input('code'),
));
// Gate your own sensitive code:
$reauth->ensureRecent($user, $current, seconds: 300);
$reauth->ensureFor(SensitiveAction::ChangeEmail, $user, $current);Opätovné overenie je obmedzené na reláciu; uzamknutý účet dostane account_locked (423). Cez HTTP: POST reauthenticate s method a heslom, kódom alebo credential odpovie confirmed s confirmed_until; POST reauthenticate/passkey/options spustí passkey ceremoniál; POST reauthenticate/otp pošle kód účtom bez hesla.
reauthentication.methods sa overuje voči faktoru, ktorý sa skutočne zhodoval: záložný kód poslaný ako totp, keď recovery_code nie je povolené, sa odmietne s factor_not_allowed (422), započíta sa ako nesprávny dôkaz a nezanechá značku — kód je však spotrebovaný, preto RecoveryCodeUsed aj tak nastane. Opätovné overenie nikdy nespraví zariadenie známym pre detekciu nových zariadení: stačí naň totiž (možno ukradnutý) prístupový token.
Ochrana vašich rout
Route::delete('/account', DeleteAccount::class)
->middleware(['auth:users', 'authentication.guard:users', 'authentication.reauthenticated:300']);Kontrola prejde, ak čerstvé prihlásenie (auth_time v rámci okna, pri fresh_login_counts) alebo nedávne opätovné overenie spĺňa požiadavku účtu v čase kontroly. Účet, ktorý má teraz TOTP alebo passkey, potrebuje dôkaz druhým faktorom: opätovné overenie cez totp, recovery_code či passkey, alebo prihlásenie, ktorého amr obsahuje mfa alebo hwk. Inak odpovie 403 reauthentication_required so zoznamom dostupných metód.
Citlivé akcie
| SensitiveAction | Chránený endpoint |
|---|---|
enable_two_factor | POST two-factor |
disable_two_factor | DELETE two-factor |
regenerate_recovery_codes | POST two-factor/recovery-codes |
register_passkey | POST passkeys/options, POST passkeys |
remove_passkey | DELETE passkeys/{passkey} |
change_email | POST email/change — len kým je email_change.require_reauthentication true (ensureFor() sa riadi tým istým prepínačom) |
logout_everywhere | POST logout/everywhere |
set_password | PUT password pre účet bez hesla |
Odstránením položky zrušíte bránu pre danú akciu — pre jeden guard alebo pre všetky. Ide o zoznam, preto zoznam guardu nahradí predvolený zoznam celý:
// config/authentication.php — this guard lets a passwordless account set a first password
// without re-authenticating; everything else stays gated.
'guards' => [
'users' => [
'reauthentication' => [
'required_for' => ['enable_two_factor', 'disable_two_factor', 'regenerate_recovery_codes',
'register_passkey', 'remove_passkey', 'change_email', 'logout_everywhere'],
],
],
],Obmedzenia
- Okno je časové: každý dôkaz platí timeout sekúnd na relácii, ktorá ho poskytla. Kde na tom záleží, držte ho krátke.
- Pri require_second_factor_when_enrolled = false splní bránu akýkoľvek zaznamenaný dôkaz bez ohľadu na faktory účtu.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.