Fasáda Jwt
Fasáda Jwt je jediný zjavný vstupný bod. Automaticky sa registruje ako globálny alias Jwt — alebo importujte RoundlyConsulting\Jwt\Facades\Jwt:
use RoundlyConsulting\Jwt\Facades\Jwt;
use RoundlyConsulting\Jwt\UserTokens\AccessTokenRequest;
// Mint an access token with a fluent, self-documenting request.
$issued = Jwt::mintAccessToken(
AccessTokenRequest::for($user->id)
->email($user->email, verified: $user->hasVerifiedEmail())
->tokenVersion($user->token_version)
->permissions('posts.view', 'posts.edit')
);
$claims = Jwt::verify($issued->token); // RS256 + iss/aud pinned
Jwt::logout($issued); // denylist it (one-call logout)
$current = Jwt::guard('api')->claims(); // current request's claims on that guard, or nullCelé API
// User tokens (RS256), for the configured jwt.audience
Jwt::mintAccessToken($request); Jwt::mint($sub, $scope, $ttl, $claims, $aud);
Jwt::mintChallengeToken($sub); Jwt::mintEmailVerifyToken($sub, $email);
Jwt::verify($jwt, ?$aud);
// One jwt guard — its own audience, settings and current claims
Jwt::guard('clients')->mintAccessToken($request); // aud = the guard's audience
Jwt::guard('clients')->mint($sub, $scope, $ttl, $claims);
Jwt::guard('clients')->verify($jwt);
Jwt::guard('clients')->claims(); // ?Claims of the current request on that guard
Jwt::guard('clients')->settings(); // JwtGuardSettings
Jwt::guard('clients')->audience(); // string
// Service tokens (HS256)
Jwt::services()->issue('billing', ['job' => 'sync']);
Jwt::services()->verify($jwt);
Jwt::services()->request('billing')->post(...); // Http client with a fresh bearer
Jwt::services()->authenticate($pendingRequest, 'billing');
Jwt::services()->claims(); // ?Claims of the calling service (service-jwt guard)
// Denylist & logout
Jwt::denylist()->has($jti); Jwt::denylist()->deny($jti, $until); Jwt::denylist()->denyToken($issued);
Jwt::logout($issued); Jwt::denyClaims($claims);
// Key publishing
Jwt::publicKey(); // RsaKey — the configured verification key
Jwt::jwks(); // ['keys' => [[kty, n, e, alg, use, kid?]]] — serve as /.well-known/jwks.json| Metóda | Vracia | Účel |
|---|---|---|
mintAccessToken(AccessTokenRequest $request) | IssuedToken | Vydá prístupový token z fluentného requestu pre nastavené audience. |
mint($subject, $scope, $ttl, $extraClaims = [], $audience = null) | IssuedToken | Vydá token s ľubovoľným scope a explicitnou platnosťou — prípad Scope alebo reťazec. |
mintChallengeToken($subject, $extraClaims = []) | IssuedToken | Vydá token 2fa_pending s platnosťou challenge_ttl. |
mintEmailVerifyToken($subject, $email) | IssuedToken | Vydá token email_verify s e-mailom a platnosťou verify_ttl. |
verify($jwt, $audience = null) | Claims | Overí RS256 token; pri chybe spustí TokenVerificationFailed a výnimku pošle ďalej. |
guard(string $name) | GuardTokens | Jeden jwt guard — vydanie, overenie, claimy, nastavenia, audience. Pri inom guarde vyhodí JwtMisconfigured. |
services() | Services | HS256 servisné tokeny — issue, verify, request, authenticate, claims. |
denylist() | Denylist | Úložisko jti denylistu. |
logout(IssuedToken $token) | void | Zaradí práve vydaný token do denylistu až do jeho expirácie. |
denyClaims(Claims $claims) | void | Zaradí token do denylistu podľa overených claimov (jti + exp). |
publicKey() | RsaKey | Nastavený overovací kľúč; ak nie je nastavený, KeyLoadFailed. |
jwks() | array | JWK Set podľa RFC 7517 pre publicKey() — zverejnite ho ako /.well-known/jwks.json. |
fake() | JwtFake | Len na fasáde: nasadí zaznamenávajúci fake — pozrite Testovanie. |
Každé volanie smeruje na kontrakt v kontajneri, ktorý sa vytvorí až pri použití. Aplikácia bez privátneho kľúča tak fasádu bez problémov použije a vaše vlastné implementácie aj testovacie náhrady fungujú ďalej.
Handle guardu
Jwt::guard($name) vráti handle GuardTokens obmedzený na nastavenia jedného jwt guardu. Jeho vydávanie aj overovanie ide cez manager, takže sa spustí TokenVerificationFailed a Jwt::fake() ich zaznamená:
| Metóda | Vracia | Účel |
|---|---|---|
mint($subject, $scope, $ttl, $extraClaims = []) | IssuedToken | Vydá token s ľubovoľným scope pre audience guardu. |
mintAccessToken(AccessTokenRequest $request) | IssuedToken | Vydá prístupový token pre audience guardu; request s iným audience vyhodí JwtMisconfigured. |
verify(string $jwt) | Claims | Overí voči audience guardu — token iného guardu zlyhá s ClaimMismatch. |
claims() | ?Claims | Overené claimy aktuálneho requestu na tomto guarde alebo null. Nikdy nie claimy iného guardu. |
settings() | JwtGuardSettings | Efektívne nastavenia, z ktorých driver jwt guard zostaví. |
audience() | string | auth.guards.<name>.audience, inak jwt.audience. |
Handle servisov
Jwt::services() vráti handle Services, ktorý pri každom volaní získa kontrakty ServiceTokenIssuer a ServiceTokenVerifier z kontajnera, takže ich nahradenie v hostiteľskej aplikácii platí — pozrite Servisné tokeny:
| Metóda | Vracia | Účel |
|---|---|---|
issue(?string $audience = null, array $claims = []) | IssuedToken | Vydá token; audience je predvolene service.audience, registrované názvy claimov sa odmietnu. |
verify(string $jwt) | Claims | Overí prichádzajúci token adresovaný tejto službe. |
request(?string $audience = null) | PendingRequest | Nový odchádzajúci request s čerstvým tokenom. |
authenticate(PendingRequest $request, ?string $audience = null) | PendingRequest | Pripojí čerstvý token k existujúcemu odchádzajúcemu requestu. |
claims(?string $guard = null) | ?Claims | Overené claimy volajúcej služby na service-jwt guarde — prvom s volajúcim, alebo presne na $guard. |
Zverejnenie overovacieho kľúča
Služby, ktoré vaše tokeny overujú, si verejný kľúč stiahnu ako štandardný JWK Set. jwks() zverejní jwt.public_key_path s alg RS256, use sig a — ak je nastavený JWT_KID — rovnakým kid, aký vydavateľ zapisuje do hlavičky tokenov:
Route::get('/.well-known/jwks.json', fn () => response()->json(Jwt::jwks()));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.