NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Refresh Tokens for Laravel

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-secret

Pepper 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 throws

Vš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 kryptomien

Odoslaní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.