Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Simplejwt Laravel Package

kelvinmo/simplejwt

SimpleJWT is a PHP library for JSON Web Tokens, signatures, and encryption. It supports JWK and COSE keys, HMAC/RSA/ECDSA/EdDSA signatures, key management, and AES encryption. Requires PHP 8+ with gmp, hash, openssl, and sodium for EdDSA/X25519.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Release note impact: kelvinmo/simplejwt v1.1.3 is a patch-level security hardening release. It adds validation for the length of decompressed data when using JWE compression (zip:DEF). This does not change the package’s architecture fit or public integration model, but it materially improves production readiness for any Laravel use case that accepts JWE-compressed payloads. Treat v1.1.3 as the minimum acceptable version for new integrations and plan to upgrade existing deployments promptly.

Architecture Fit

The kelvinmo/simplejwt package remains a specialized JWT/JWS/JWE library that aligns well with Laravel’s need for secure authentication, authorization, and encrypted payload handling in API-first applications. Its RFC-compliant implementation supports interoperability with standards-based identity providers, API gateways, and service-to-service auth patterns.

Key strengths for Laravel:

  • Can replace or augment Laravel Sanctum/Passport token handling where stateless JWT/JWE flows are required.
  • JWE support enables encrypted payloads for sensitive data, including PII and regulated data flows.
  • KeySet abstraction supports key rotation and multi-tenant key isolation.
  • EdDSA/X25519 support future-proofs cryptographic choices, though RSA/ECDSA remain more common in Laravel deployments.
  • v1.1.3 improves resistance to decompression-based denial-of-service patterns in JWE-compressed payloads.

Potential conflicts:

  • Laravel’s Sanctum/Passport and Illuminate\Support\Facades\Crypt overlap with parts of this package. The TPM should explicitly decide whether this package replaces, extends, or coexists with existing auth and encryption mechanisms.
  • The package has no built-in Laravel service provider. Integration requires container bindings, middleware, and key-management configuration.
  • JWE compression must be treated as optional and policy-controlled. After v1.1.3, decompressed length validation is present, but the application should still enforce payload-size limits at the API boundary.

Integration Feasibility

Integration remains low-to-medium effort for a Laravel team with JWT/JWE experience, assuming:

  1. PHP 8.0+ and a supported Laravel version, validated against Laravel 9+ and re-tested against the current LTS.
  2. Required extensions are available: gmp, openssl, and sodium.
  3. A key-management strategy is defined before implementation: static config, database-backed keys, or external KMS/Vault.
  4. The team confirms whether JWE compression (zip:DEF) is needed. If not, disable or reject compressed JWE payloads at the application boundary.

Critical dependencies:

Dependency Laravel Compatibility Notes
php:^8.0 ✅ Laravel 9+ Re-test on current Laravel LTS.
ext-gmp ✅ Required for RSA/ECDSA.
ext-openssl ✅ Required for HMAC/RSA.
ext-sodium ✅ Required for EdDSA/X25519; plan fallback if unavailable.

Laravel-specific considerations:

  • Bind KeySet as a singleton or scoped service in Laravel’s container.
  • Create JWT verification middleware to replace or wrap auth:api.
  • Store asymmetric keys in config, .env, a dedicated keys table, or an external secret manager. Do not hardcode production secrets.
  • Add application-level request size limits and monitor JWE decompression failures after upgrading to v1.1.3.

Technical Risk

Risk Area Severity Mitigation Strategy
Key Management High Use Laravel config, encrypted secret storage, or KMS/Vault. Avoid hardcoded keys. Define rotation and revocation.
Algorithm Mismatch / Algorithm Confusion Medium Strictly validate alg and enc headers. Reject weak or unexpected algorithms in production.
JWE Decompression / Resource Exhaustion Medium, reduced in v1.1.3 Upgrade to >= v1.1.3. Enforce max HTTP payload sizes and max decompressed sizes. Disable zip:DEF if not required.
Performance Low-to-Medium Benchmark JWT and JWE paths against firebase/php-jwt. JWE adds overhead, especially for large payloads.
Extension Dependencies Medium Confirm sodium availability for EdDSA. Fall back to RSA/ECDSA where needed.
Multi-Tenancy Medium Isolate KeySet per tenant and validate tenant context before token operations.
Upgrade Path Low v1.1.3 is patch-level and does not appear to introduce breaking API changes. Still run regression tests for JWE-compressed payload handling.

Critical Questions for the TPM:

  1. Will this replace or extend Laravel’s existing JWT/auth flow?
    Determine impact on Sanctum/Passport, auth:api, and existing token formats.
  2. How will keys be managed and rotated?
    Static .env, database, AWS KMS, HashiCorp Vault, or another secret manager?
  3. Do any payloads use JWE compression (zip:DEF)?
    If yes, v1.1.3 is a required upgrade and payload/decompression limits should be enforced. If no, consider rejecting compressed JWE payloads.
  4. Are there compliance requirements?
    FIPS, GDPR, PII handling, or audit requirements may influence algorithm choice, key storage, and logging.
  5. What is the fallback for missing sodium?
    RSA/ECDSA are viable alternatives but may affect performance and key management.
  6. How will token revocation work?
    Short-lived tokens, nbf/exp, denylist cache, or another revocation strategy?

Integration Approach

Stack Fit

Primary Laravel use cases:

  1. Stateless API authentication using JWS/JWT with HS256 or RS256.
  2. Encrypted API payloads using JWE for sensitive data and PII.
  3. OAuth2/OIDC-adjacent token generation with custom claims.
  4. Multi-tenant key isolation via per-tenant KeySet resolution.
  5. Service-to-service auth where standards-compliant JWT/JWE interoperability matters.

Laravel stack compatibility:

Laravel Component Integration Path
Auth Replace or wrap auth:api with custom JWT middleware.
Sanctum/Passport Extend token generation/validation or migrate selected flows.
Crypt Use JWE for encrypted payload use cases where Illuminate\Encryption is not sufficient.
Cache Cache resolved KeySet instances and optionally revocation data.
Queue Offload key rotation, audit logging, and cleanup tasks.
Database Store key metadata or tenant key references in a controlled table.
HTTP Middleware Enforce request-size and decompressed-size limits around JWE endpoints.

Migration Path

Phase 0: Security and dependency review (days)

  • Upgrade dependency constraint to kelvinmo/simplejwt >= v1.1.3.
  • Confirm whether any current or planned flows use JWE compression (zip:DEF).
  • Run composer audit and review upstream release notes.

Phase 1: Proof of concept (1–2 weeks)

  • Install v1.1.3 in a sandbox Laravel app.
  • Test JWT signing/verification with HS256 and RS256.
  • Test JWE encryption/decryption with and without zip:DEF.
  • Validate that decompressed payload length limits behave as expected.
  • Store test keys outside source control.

Phase 2: Feature parity and Laravel integration (2–3 weeks)

  • Bind KeySet into Laravel’s container.
  • Build JWT verification middleware.
  • Add JWE encrypt/decrypt middleware or service-layer helpers for sensitive payloads.
  • Add request-size limits and decompression safeguards at the HTTP boundary.
  • Compare behavior with existing Sanctum/Passport flows.

Phase 3: Production readiness (3–4 weeks)

  • Implement key rotation with kid-based key selection.
  • Add structured logging for alg, enc, kid, exp, and failure reasons.
  • Add monitoring and alerts for JWE decryption failures and decompression errors.
  • Benchmark JWT and JWE latency against current auth/encryption mechanisms.
  • Document operational runbooks for key rotation, revocation, and incident response.

Compatibility

Component Compatibility Notes
Laravel 9+ Expected compatible; validate against the current Laravel LTS.
PHP 8.0+ Required. Confirm production PHP version and extensions.
ext-gmp, ext-openssl, ext-sodium Required for full algorithm coverage; verify in CI and production images.
Sanctum/Passport Not a drop-in replacement; plan coexistence or migration explicitly.
JWE zip:DEF Supported; v1.1.3 adds decompressed-length validation. Still enforce application-level limits.
Existing JWT libraries Migration requires token-format, claim, key, and middleware regression testing.

Sequencing

  1. Upgrade to v1.1.3 first. Do not deploy new JWE-compressed payload support on older patch versions.
  2. Decide auth replacement vs. augmentation. Avoid running two token systems without a clear ownership boundary.
  3. Define key management before middleware work. Key storage and rotation drive most integration complexity.
  4. Implement JWT authentication before JWE payload encryption. Auth is the higher-priority control plane.
  5. Add JWE compression only if required. If enabled, enforce size limits and monitor decompression behavior.
  6. Harden observability and rotation before production cutover.

Operational Impact

Maintenance

  • Expect ongoing dependency and security-patch tracking. v1.1.3 demonstrates the need to monitor upstream releases for JWE hardening.
  • The lack of a first-party Laravel service provider means the team owns container bindings, configuration, middleware, and documentation.
  • Key rotation, algorithm policy, and tenant key isolation require documented operational procedures.
  • Pin to a minimum safe version (>= v1.1.3) and test patch upgrades in staging.

Support

  • This is a community package, not an official Laravel component. Internal ownership should be explicit.
  • The team needs at least one engineer comfortable with JWT, JWS, JWE, key rotation, and Laravel middleware.
  • Upstream issue responsiveness and release cadence should be reviewed as part of production readiness.
  • Maintain an internal runbook for token failures, key rotation, and decompression-related incidents.

Scaling

  • Stateless JWT validation scales well horizontally.
  • JWE adds CPU and payload-size overhead. Benchmark before using it on high-volume endpoints.
  • Cache KeySet resolution, especially for multi-tenant or external-KMS-backed key storage.
  • Enforce maximum request and decompressed payload sizes to protect workers and memory.
  • Key rotation and revocation workflows should be asynchronous where possible.

Failure Modes

  • Key mismatch or missing kid: token verification/decryption fails; alert and provide rotation-safe fallback logic.
  • Algorithm/encryption policy violation: reject requests explicitly rather than falling back to permissive behavior.
  • JWE decompression errors or oversized payloads: v1.1.3 mitigates one class of risk, but application-level limits remain necessary.
  • Missing sodium extension: EdDSA flows fail; fall back to RSA/ECDSA or block deployment via preflight checks.
  • Clock skew: validate nbf/exp with acceptable leeway and monitor auth failures.
  • Revocation gaps: short-lived tokens reduce exposure; pair with denylist or session strategy where required.
  • Middleware ordering mistakes: ensure JWT/JWE middleware runs before authorization and controller logic.

Ramp-Up

  • Initial POC: 1–2 weeks for a Laravel team familiar with JWT concepts.
  • Production-ready integration: 6–10 weeks including key management, middleware, observability, and security review.
  • If replacing Sanctum/Passport: add additional migration and regression testing time.
  • If enabling JWE compression: require explicit security review, payload-size limits, and upgrade verification against v1.1.3.
  • TPM should schedule a security-focused milestone before production cutover covering key storage, algorithm policy, decompression limits, and incident response.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
steadrun/laravel-monitor
labyrinthe/connect-laravel
elmogy/layan
drewdan/sentinel-client
dskripchenko/laravel-llm
fatryst/nuonuo
stevenay/myanfont
gmostafa/php-graphql-client
xeviant/paystack
snowsoft/faker
meditationsteps/blogetc
animalyoung/laravel-influxdb
onix-solutions/sms-telera
lonely-lights/prosetta
oxygen/data
oxygen/core
jengo/base
xiloryx/log-collector
a21ns1g4ts/filament-stripe
la-php/laravel-admin