ceedcv-maya/shared-auth-laravel
| Install | |
|---|---|
composer require ceedcv-maya/shared-auth-laravel |
|
| Latest Version: | v0.23.0 |
| PHP: | ^8.4 |
| Laravel: | 11 · 12 · 13 |
| License: | MIT |
| Last Updated: | Oct 15, 2026 |
| Links: | GitHub · Packagist |
ceedcv-maya/shared-auth-laravel
Keycloak/OIDC JWT authentication middleware for Laravel: JWKS caching, RequirePermissionMiddleware, AppToAppAuthenticator, configurable user resolver.
Part of the ceedcv-maya/maya_platform mono-repo. Distributed independently for reuse outside the Maya ecosystem.
Installation
composer require ceedcv-maya/shared-auth-laravel
// routes/api.php
use Maya\Auth\Middleware\AuthenticateJwt;
use Maya\Auth\Middleware\RequirePermission;
Route::middleware([AuthenticateJwt::class, RequirePermission::class.':users.read'])->group(function () {
Route::get('/me', fn () => auth()->user());
});
KEYCLOAK_URL=https://keycloak.example.org
KEYCLOAK_REALM=my-realm
KEYCLOAK_CLIENT_ID=my-app
Token validation (JwtMiddleware)
A request passes only with a Keycloak access token that meets all of these:
| Check | Rule | Config |
|---|---|---|
| Signature | RS256 with the JWKS key named by the kid header (JWKS cached) |
auth.jwks_url, auth.jwks_cache_ttl |
| Issuer | iss equals the configured issuer |
auth.jwt_issuer |
| Expiry | exp is required and must be in the future (also iat/nbf when present); no clock leeway |
— |
| Token type | typ claim is exactly Bearer (Keycloak access token). ID tokens (ID), refresh tokens (Refresh, Offline) and tokens without typ are rejected |
— |
| Audience | aud contains, or azp equals, one of the comma-separated values (one per app: its own client_id) |
auth.jwt_audience (required outside testing) |
Any failure returns 401 (WWW-Authenticate: Bearer error="invalid_token") and logs JWT authentication failed: info with error_code=JWT-EXPIRED for expired tokens, warning with error_code=JWT-INVALID for everything else.
Tests that mint their own JWTs (instead of bypassing the middleware) must add the typ: Bearer and exp claims.
TypeScript / build notes
PSR-4 autoload from src/. Service providers are registered via Laravel package discovery (no manual provider registration needed).
License
MIT — see LICENSE.
Reporting issues
The canonical source lives in Maya-AQSS/maya_platform. File issues there; this read-only split repo is only the published artifact.
Related Packages
Simple Keycloak Client Lumen microservices Client Credentials authenticate
User profile endpoints for Laravel + Keycloak: GET /me, PUT /me/locale, configur...
Lean Laravel auth guard that validates AWS Cognito User Pool JWTs. Supports DB-b...
Version History
| Version | Released | PHP | Laravel | License |
|---|---|---|---|---|
| v0.23.0 | ^8.4 | ^11.0 || | MIT | |
| v0.22.2 | ^8.4 | ^11.0 || | MIT | |
| v0.22.1 | ^8.4 | ^11.0 || | MIT | |
| v0.22.0 | ^8.4 | ^11.0 || | MIT | |
| v0.21.0 | ^8.4 | ^11.0 || | MIT | |
| v0.20.0 | ^8.4 | ^11.0 || | MIT | |
| v0.19.0 | ^8.4 | ^11.0 || | MIT | |
| v0.18.0 | ^8.4 | ^11.0 || | MIT | |
| v0.17.0 | ^8.4 | ^11.0 || | MIT | |
| v0.16.0 | ^8.4 | ^11.0 || | MIT | |
| v0.15.0 | ^8.4 | ^11.0 || | MIT | |
| v0.14.0 | ^8.4 | ^11.0 || | MIT | |
| v0.13.0 | ^8.4 | ^11.0 || | MIT | |
| v0.12.0 | ^8.4 | ^11.0 || | MIT | |
| v0.11.3 | ^8.4 | ^11.0 || | MIT | |
| v0.11.2 | ^8.4 | ^11.0 || | MIT | |
| v0.11.1 | ^8.4 | ^11.0 || | MIT | |
| v0.11.0 | ^8.4 | ^11.0 || | MIT | |
| v0.10.0 | ^8.4 | ^11.0 || | MIT | |
| v0.9.0 | ^8.4 | ^11.0 || | MIT | |
| v0.8.0 | ^8.4 | ^11.0 || | MIT | |
| v0.7.0 | ^8.4 | ^11.0 || | MIT | |
| v0.6.0 | ^8.4 | ^11.0 || | MIT | |
| v0.5.3 | ^8.4 | ^11.0 || | MIT | |
| v0.5.2 | ^8.4 | ^11.0 || | MIT | |
| v0.5.1 | ^8.4 | ^11.0 || | MIT | |
| v0.5.0 | ^8.4 | ^11.0 || | MIT | |
| v0.4.0 | ^8.4 | ^11.0 || | MIT | |
| v0.3.1 | ^8.4 | ^11.0 || | MIT | |
| v0.3.0 | ^8.4 | ^11.0 || | MIT |
Showing the latest 30 of 32. See every release on Packagist