Výnimky
RoundlyConsulting\Jwt\Jose\Exceptions\JwtException rozširuje RuntimeException a je základom každej chyby tokenu. Zachyťte ju na jednotné ošetrenie alebo zachyťte podtriedu pre presnú príčinu:
| Výnimka | Kedy nastane |
|---|---|
JwtException | Základná trieda — zachyťte ju a ošetríte akékoľvek zlyhanie tokenu. |
MalformedToken | Token nemá tri segmenty, má neplatný base64url, hlavička či payload nie je JSON objekt, alebo má viac než 8 KB. |
AlgorithmMismatch | alg v hlavičke nie je pripnutý algoritmus alebo typ kľúča nesedí — blokuje alg:none a zámenu RS256↔HS256. |
InvalidSignature | Podpis RS256 alebo HS256 nesedí; aj každý iss servisného tokenu, ktorý v režime tajomstiev pre jednotlivé služby chýba v mape tajomstiev — aj keď je na zozname povolených. |
UnexpectedTokenType | Hlavička typ je prítomná a nie je JWT (explicitné typovanie podľa RFC 8725). |
UnencodableClaims | Claim sa nedá serializovať do JSON, napr. ne-UTF-8 bajty v doplnkovom claime. |
TokenExpired | exp mínus leeway je v minulosti. |
TokenNotYetValid | nbf alebo iat je v budúcnosti nad rámec leeway. |
UnexpectedCriticalHeader | Token nesie hlavičku crit. |
ClaimMismatch | Povinný claim chýba alebo má zlý typ; nesedí pripnutý iss/aud; zlyhá kontrola scope, audience či vydavateľa servisného tokenu. |
KeyLoadFailed | Kľúč chýba, nedá sa prečítať (súbor existuje, no PHP proces ho nemôže čítať), nie je RSA, má menej než 2048 bitov alebo nie je nastavená jeho cesta. |
EmptySecret | HMAC tajomstvo je prázdne. |
PemAsHmacSecret | Ako HMAC tajomstvo bol podaný kľúč v PEM formáte. |
WeakSecret | HMAC tajomstvo má menej než 32 bajtov, je jeden opakovaný bajt alebo obsahuje surový DER kľúč. |
use RoundlyConsulting\Jwt\Facades\Jwt;
use RoundlyConsulting\Jwt\Jose\Exceptions\JwtException;
use RoundlyConsulting\Jwt\Jose\Exceptions\TokenExpired;
try {
$claims = Jwt::verify($jwt);
} catch (TokenExpired $e) {
// Prompt a re-login / refresh flow.
} catch (JwtException $e) {
// Any other token failure: 401.
}Chybná konfigurácia je 500, nie 401
Oba guardy premenia JwtException na null používateľa — teda 401. Chyby konfigurácie touto cestou ísť nesmú, preto zámerne nie sú JwtException:
- RoundlyConsulting\Jwt\Exceptions\JwtMisconfigured — nenastavený issuer či audience (null alebo prázdny), názov guardu, ktorý nie je jwt guard, nevolateľná token_version, mintAccessToken() na guarde s requestom pre iné audience alebo konfiguračná hodnota nesprávneho tvaru — TTL five, nerozpoznaný prepínač, chybná dvojica v service.secrets alebo v nej dvakrát uvedený vydavateľ či identity, ktorá nie je ClaimsAuthenticatable. Tajomstvo nikdy nevypíše: opakovaného vydavateľa pomenuje, len ak naň vyzerá, inak uvedie pozície položiek, a pri service.secret / service.secrets správa uvedie len typ hodnoty („must be a string or null, array given“), pričom samotná hodnota sa do rámcov stack trace nedostane.
- RoundlyConsulting\Jwt\ServiceTokens\Exceptions\ServiceAuthMisconfigured — chýbajúce alebo slabé tajomstvo, chýbajúci názov služby, chýbajúce audience či vlastný vydavateľ pri vydaní, chýbajúci vlastný záznam v mape tajomstiev alebo rezervované doplnkové claimy.
- KeyLoadFailed je JwtException, no guard jwt ju vyhodí ďalej ešte pred všeobecným ošetrením — chýbajúci či neplatný RSA kľúč je chyba prevádzky, nie neprihlásený volajúci.
Správy KeyLoadFailed sú konkrétne: pomenujú chýbajúcu či nečitateľnú cestu aj riešenie, napríklad spustiť jwt:generate-keys, nastaviť env premennú alebo dať PHP používateľovi právo na čítanie.
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.