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

Vydávanie používateľských tokenov

Používateľské tokeny sú RS256 JWT podpísané na vydávajúcej aplikácii privátnym RSA kľúčom. Vydavateľ pripne iss, aud, sub, iat, nbf, exp, jti a scope — tieto vždy prepíšu rovnomenný claim od volajúceho, takže doplnkové claimy nikdy nepodvrhnú identitu.

Prístupové tokeny

AccessTokenRequest je nemenný fluentný builder — každá metóda vracia novú inštanciu. Výsledný token má scope = access:

use RoundlyConsulting\Jwt\Facades\Jwt;
use RoundlyConsulting\Jwt\UserTokens\AccessTokenRequest;

$request = AccessTokenRequest::for($user->id)                     // subject (string|int)
    ->email($user->email, verified: $user->hasVerifiedEmail())    // email + email_verified claims
    ->tokenVersion($user->token_version)                          // tv claim (freshness)
    ->permissions('posts.view', 'posts.edit')                     // permissions claim
    ->withClaims(['org' => 42]);                                  // arbitrary extra claims

$issued = Jwt::mintAccessToken($request);
  • for($subject) — claim sub; prijme reťazec aj int.
  • email($email, verified: bool) — claimy email a email_verified.
  • tokenVersion(int) — claim tv, ktorý porovnáva kontrola verzie tokenu v guarde.
  • permissions(...$abilities) — claim permissions pre autorizáciu z claimov.
  • withClaims(array) — ľubovoľné doplnkové claimy; registrované a známe claimy majú vždy prednosť.

Vrátenie tokenu

Každé vydanie vracia readonly objekt IssuedToken:

$issued->token;      // string — the compact JWS to return to the client
$issued->expiresAt;  // CarbonImmutable — the expiry
$issued->jti;        // string — the token id (store it to denylist later)

return response()->json([
    'access_token' => $issued->token,
    'token_type' => 'Bearer',
    'expires_at' => $issued->expiresAt->toIso8601String(),
]);

Audience, platnosť a claimy relácie

audience() a ttl() riadia vydavateľa a do payloadu sa nikdy nezapíšu. sid, amr a auth_time sa pridajú len vtedy, keď ich nastavíte, takže existujúci kód vydáva presne to isté ako doteraz:

AccessTokenRequest::for($user->id)
    ->audience('app-clients')                 // aud — defaults to jwt.audience
    ->ttl(600)                                // seconds — defaults to jwt.ttl
    ->sessionId($familyId)                    // sid
    ->authMethods('pwd', 'otp', 'mfa')        // amr (RFC 8176)
    ->authTime($loggedInAt);                  // auth_time — int or any DateTimeInterface

$claims->sessionId();    // ?string
$claims->authMethods();  // list<string>, [] when absent
$claims->authTime();     // ?int

ttl() pod jednu sekundu, prázdne sessionId() a prázdne alebo chýbajúce authMethods() vyhodia InvalidArgumentException. amr sa deduplikuje, platí prvý výskyt.

Challenge, overenie e-mailu a vlastné scope

Tokeny 2fa_pending a email_verify použijú nastavené challenge_ttl a verify_ttl — číslo nemusíte odovzdávať ručne:

Jwt::mintChallengeToken($subject);                 // scope=2fa_pending, exp = challenge_ttl
Jwt::mintEmailVerifyToken($subject, $user->email); // scope=email_verify, exp = verify_ttl

// Extra claims on a challenge token:
Jwt::mintChallengeToken($subject, ['method' => 'totp']);

// Any other scope via the generic mint():
Jwt::mint($subject, 'my_custom_scope', ttl: 120, extraClaims: ['org' => 42]);

Enum Scope

Štyri vstavané scope sú backed enum. mint() prijme prípad Scope aj ľubovoľný reťazec, takže vlastné scope zostávajú voľnými reťazcami:

use RoundlyConsulting\Jwt\UserTokens\Scope;

Scope::Access->value;        // 'access'
Scope::TwoFaPending->value;  // '2fa_pending'
Scope::EmailVerify->value;   // 'email_verify'
Scope::Service->value;       // 'service'

Jwt::mint($subject, Scope::Access, ttl: 900);  // pass an enum case, or any string
Scope::values();                               // Collection: ['access', '2fa_pending', …]

Bez fasády

Uprednostnite fasádu. Na pozadí deleguje na kontrakt UserTokenIssuer (naviazaný na NativeUserTokenIssuer), ktorý môžete získať aj priamo — pozrite DI a akcie:

use RoundlyConsulting\Jwt\UserTokens\AccessTokenRequest;
use RoundlyConsulting\Jwt\UserTokens\Contracts\UserTokenIssuer;

$issued = app(UserTokenIssuer::class)->mintAccessToken(
    AccessTokenRequest::for($user->id)->email($user->email, verified: true)
);

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.