Bezpečnosť a hašovanie
Prečo SHA-256, a nie bcrypt či argon
Refresh token je 64-znakové tajomstvo z CSPRNG v abecede base64url — približne 384 bitov entropie. Pomalý hash hesiel nepridá nič proti tajomstvu, ktoré sa nedá uhádnuť hrubou silou, a rozbil by indexované vyhľadávanie podľa unikátnej zhody, na ktorom rotácia stojí.
Pepper (ochrana do hĺbky)
Nastavte hash.key na tajomstvo s vysokou entropiou a uložený odtlačok bude HMAC namiesto čistého hashu — stále jedna deterministická hodnota pod tým istým unikátnym indexom, takže vyhľadávanie aj atomické uplatnenie zostávajú rovnaké. Útočník, ktorý získa tabuľku, no nie tajomstvo aplikácie, nedokáže overiť ani uhádnuť žiadny token:
REFRESH_TOKENS_HASH_KEY=base64:your-high-entropy-secretPepper držte mimo databázy (v env alebo v správcovi tajomstiev) a narábajte s ním ako s APP_KEY. Chýbajúca hodnota alebo len medzery znamenajú bez peppera; hodnota, ktorá vôbec nie je reťazec, vyhodí InvalidTokenConfigurationException namiesto toho, aby sa pepper potichu vynechal. Zmena hash.key — nastavenie, rotácia či vymazanie — zneplatní všetky existujúce tokeny a ich držitelia sa musia prihlásiť znova. Rotácia peppera za behu nie je podporovaná, preto si ho zvoľte vopred alebo naplánujte okno na opätovné prihlásenie.
Validovaná konfigurácia hašovania
REFRESH_TOKENS_HASH_ALGO=sha512 # sha256 (default) | sha384 | sha512 — anything else throws
REFRESH_TOKENS_LENGTH=64 # 32–4096 base64url chars — outside the range throwsVšetky tri povolené algoritmy sa zmestia do 128-znakového stĺpca token_hash.
Bezpečná serializácia
Model RefreshToken skrýva token_hash a access_reference, takže endpoint „vaše zariadenia“, ktorý serializuje riadky relácií, nikdy neprezradí odtlačok ani odkaz na prístupový token:
// token_hash and access_reference are in $hidden — safe to return as JSON:
return $user->sessions()->get();Záruky v skratke
- SHA-2 odtlačok v databáze pod unikátnym indexom; plaintext sa vráti raz a nikdy sa neuloží.
- Rotácia jediným dopytom s ochranou proti dvojitému použitiu — na PostgreSQL aj SQLite rovnako.
- Vždy zapnuté odvolanie rodiny pri detekcii opätovného použitia, odolné voči súbehom — použitý token predložený na uplatnenie aj na odhlásenie.
- Absolútna životnosť relácie uložená pre každú rodinu, takže ukradnutú, no aktívnu reláciu nemožno obnovovať donekonečna.
- Obnova obmedzená na typ účtu — token predložený na endpointe iného typu účtu je neviditeľný.
- #[SensitiveParameter] na každom parametri s plaintextom; plaintext ani hashe sa nikdy nelogujú.
- Odtlačok aj plaintext z CSPRNG zabezpečuje zdieľaný balík crypto-for-laravel.
Čo zostáva na aplikácii
Vytváranie a overovanie JWT, denylist jti, parsovanie user-agenta, geolokácia IP, HTTP routy a controllery, obmedzovanie požiadaviek a prenos cez cookies. Napájajú sa cez kontrakt AccessTokenRevoker, enrich() a udalosti.
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.