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

Rozšírenie

Každá časť balíka je v JwtServiceProvider naviazaná cez kontrakt, takže hostiteľská aplikácia môže ktorúkoľvek nahradiť vlastnou implementáciou:

KontraktPredvolená implementáciaZodpovednosť
UserTokens\Contracts\UserTokenIssuerNativeUserTokenIssuerVydávanie RS256 používateľských tokenov.
UserTokens\Contracts\UserTokenVerifierNativeUserTokenVerifierOverovanie RS256 tokenov — podpis, čas, pripnutý iss/aud.
ServiceTokens\Contracts\ServiceTokenIssuerNativeServiceTokenServiceVydávanie HS256 servisných tokenov.
ServiceTokens\Contracts\ServiceTokenVerifierNativeServiceTokenServiceOverovanie prichádzajúcich HS256 servisných tokenov.
Denylist\Contracts\DenylistCacheDenylistUkladanie a dopytovanie zneplatnených jti.
use RoundlyConsulting\Jwt\Denylist\Contracts\Denylist;

// A service provider in the host app.
public function register(): void
{
    $this->app->singleton(Denylist::class, fn ($app) => new DatabaseDenylist(/* ... */));
}

Metódy kontraktu implementujte presne. Kontrakty používateľských tokenov majú voliteľné audience, ktoré musí vlastná implementácia prijať — guard jwt vždy odovzdáva do verify() svoje audience:

// Denylist
public function has(string $jti): bool;
public function deny(string $jti, CarbonImmutable $until): void;
public function denyToken(IssuedToken $token): void;

// UserTokenIssuer / UserTokenVerifier take an optional audience
public function mint(string $subject, Scope|string $scope, int $ttl, array $extraClaims = [], ?string $audience = null): IssuedToken;
public function verify(string $jwt, ?string $audience = null): Claims;   // null ⇒ the configured jwt.audience

Jwt::services() získa ServiceTokenIssuer a ServiceTokenVerifier z kontajnera pri každom volaní, takže nahradenie vydavateľa zmení, čo vytvoria issue(), request() a authenticate(), a nahradenie overovača zmení, čo prijme verify() aj guard service-jwt.

Vlastná identita v claims režime

TokenUser zámerne nie je final a vytvára sa cez new static, takže podtrieda sa z guardu vráti ako ona sama:

namespace App\Auth;

use RoundlyConsulting\Jwt\UserTokens\TokenUser;

class ApiActor extends TokenUser
{
    public function tenant(): string
    {
        return $this->claims()->has('tenant')
            ? $this->claims()->string('tenant')
            : 'none';
    }
}
// config/jwt.php — or per guard via auth.guards.<name>.identity
'guard' => [
    'identity' => \App\Auth\ApiActor::class,
],

Zachovajte signatúru konštruktora TokenUser alebo prepíšte aj fromClaims(). Ak začínate od nuly, implementujte ClaimsAuthenticatable — fromClaims(Claims $claims): self nad rozhraním Authenticatable z Laravelu — a pre autorizáciu z claimov aj ChecksPermissions s hasPermission(string $ability): bool. Neplatná trieda identity sa nahradí triedou TokenUser.

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.