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

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 null

Celé 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ódaVraciaÚčel
mintAccessToken(AccessTokenRequest $request)IssuedTokenVydá prístupový token z fluentného requestu pre nastavené audience.
mint($subject, $scope, $ttl, $extraClaims = [], $audience = null)IssuedTokenVydá token s ľubovoľným scope a explicitnou platnosťou — prípad Scope alebo reťazec.
mintChallengeToken($subject, $extraClaims = [])IssuedTokenVydá token 2fa_pending s platnosťou challenge_ttl.
mintEmailVerifyToken($subject, $email)IssuedTokenVydá token email_verify s e-mailom a platnosťou verify_ttl.
verify($jwt, $audience = null)ClaimsOverí RS256 token; pri chybe spustí TokenVerificationFailed a výnimku pošle ďalej.
guard(string $name)GuardTokensJeden jwt guard — vydanie, overenie, claimy, nastavenia, audience. Pri inom guarde vyhodí JwtMisconfigured.
services()ServicesHS256 servisné tokeny — issue, verify, request, authenticate, claims.
denylist()DenylistÚložisko jti denylistu.
logout(IssuedToken $token)voidZaradí práve vydaný token do denylistu až do jeho expirácie.
denyClaims(Claims $claims)voidZaradí token do denylistu podľa overených claimov (jti + exp).
publicKey()RsaKeyNastavený overovací kľúč; ak nie je nastavený, KeyLoadFailed.
jwks()arrayJWK Set podľa RFC 7517 pre publicKey() — zverejnite ho ako /.well-known/jwks.json.
fake()JwtFakeLen 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ódaVraciaÚčel
mint($subject, $scope, $ttl, $extraClaims = [])IssuedTokenVydá token s ľubovoľným scope pre audience guardu.
mintAccessToken(AccessTokenRequest $request)IssuedTokenVydá prístupový token pre audience guardu; request s iným audience vyhodí JwtMisconfigured.
verify(string $jwt)ClaimsOverí voči audience guardu — token iného guardu zlyhá s ClaimMismatch.
claims()?ClaimsOverené claimy aktuálneho requestu na tomto guarde alebo null. Nikdy nie claimy iného guardu.
settings()JwtGuardSettingsEfektívne nastavenia, z ktorých driver jwt guard zostaví.
audience()stringauth.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ódaVraciaÚčel
issue(?string $audience = null, array $claims = [])IssuedTokenVydá token; audience je predvolene service.audience, registrované názvy claimov sa odmietnu.
verify(string $jwt)ClaimsOverí prichádzajúci token adresovaný tejto službe.
request(?string $audience = null)PendingRequestNový odchádzajúci request s čerstvým tokenom.
authenticate(PendingRequest $request, ?string $audience = null)PendingRequestPripojí čerstvý token k existujúcemu odchádzajúcemu requestu.
claims(?string $guard = null)?ClaimsOverené 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 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.