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:
| Kontrakt | Predvolená implementácia | Zodpovednosť |
|---|---|---|
UserTokens\Contracts\UserTokenIssuer | NativeUserTokenIssuer | Vydávanie RS256 používateľských tokenov. |
UserTokens\Contracts\UserTokenVerifier | NativeUserTokenVerifier | Overovanie RS256 tokenov — podpis, čas, pripnutý iss/aud. |
ServiceTokens\Contracts\ServiceTokenIssuer | NativeServiceTokenService | Vydávanie HS256 servisných tokenov. |
ServiceTokens\Contracts\ServiceTokenVerifier | NativeServiceTokenService | Overovanie prichádzajúcich HS256 servisných tokenov. |
Denylist\Contracts\Denylist | CacheDenylist | Ukladanie 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.audienceJwt::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 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.