auth0/jwt-auth-bundle
Symfony bundle for Auth0 authentication and management APIs. Supports PHP 8.1+ and Symfony 6.4/7/8. Install via Composer, configure domain/client credentials and callback/logout URLs, then use the SDK for login, tokens, and user sessions.
## Getting Started
### First Steps for a Laravel Developer
1. **Installation**
```bash
composer require auth0/symfony
Note: While this is a Symfony package, Laravel developers can use it via a bridge like spatie/laravel-symfony or by manually integrating the core Auth0 SDK logic.
Configuration
.env entries for AUTH0_DOMAIN, AUTH0_CLIENT_ID, and AUTH0_CLIENT_SECRET./login, /callback, and /logout (see Implementation Patterns for Laravel-specific routing).First Use Case: Authenticate a User
Auth0\SDK\Auth0 class to validate tokens or trigger login flows.use Auth0\SDK\Auth0;
$auth0 = new Auth0([
'domain' => env('AUTH0_DOMAIN'),
'client_id' => env('AUTH0_CLIENT_ID'),
'client_secret' => env('AUTH0_CLIENT_SECRET'),
]);
// Redirect to Auth0 login
return redirect()->to($auth0->login(['redirect_uri' => route('callback')]));
// app/Http/Middleware/Auth0Middleware.php
public function handle($request, Closure $next) {
if (!$request->user()) {
$auth0 = new Auth0([...]);
return redirect()->to($auth0->login(['redirect_uri' => route('callback')]));
}
return $next($request);
}
app/Http/Kernel.php:
protected $routeMiddleware = [
'auth0' => \App\Http\Middleware\Auth0Middleware::class,
];
use Auth0\SDK\Auth0;
$auth0 = new Auth0([...]);
$token = $request->bearerToken();
try {
$user = $auth0->getUser($token);
// Attach user to request or validate scopes
} catch (\Exception $e) {
return response()->json(['error' => 'Unauthorized'], 401);
}
// routes/web.php
Route::get('/callback', function () {
$auth0 = new Auth0([...]);
$user = $auth0->getUser(); // Uses code from Auth0 redirect
Auth::loginUsingId($user['sub']); // Custom logic to link Auth0 user to Laravel
return redirect()->to(route('private'));
});
$managementApi = $auth0->managementApi();
$users = $managementApi->users()->listUsers();
Route::get('/logout', function () {
Auth::logout();
$auth0 = new Auth0([...]);
return redirect()->to($auth0->logout(['returnTo' => route('home')]));
});
token_cache and management_token_cache:
# config/auth0.yaml (Laravel-style)
token_cache: cache.auth0
management_token_cache: cache.auth0_management
User model to sync Auth0 data:
class User extends Authenticatable {
public static function findForPassport($identifier) {
$auth0 = new Auth0([...]);
$user = $auth0->getUser($identifier);
return self::firstOrCreate(['email' => $user['email']], $user);
}
}
Token Validation Failures
AUTH0_DOMAIN includes https:// (e.g., https://your-domain.auth0.com).try {
$auth0->getUser($token);
} catch (\Auth0\SDK\Exception\CoreException $e) {
Log::error($e->getMessage());
}
CSRF Issues in Callback
Route::get('/callback', [...])->middleware('web')->withoutMiddleware(\App\Http\Middleware\VerifyCsrfToken::class);
Session vs. Token Confusion
auth0.authenticator (Symfony) or Laravel middleware.auth0.authorizer (Symfony) or validate tokens manually in APIs.$auth0 = new Auth0([...], [
'log_level' => \Monolog\Logger::DEBUG,
'logger' => new \Monolog\Handler\StreamHandler(storage_path('logs/auth0.log')),
]);
$jwt = (new \Firebase\JWT\JWT())->decode($token, $auth0->getPublicKey(), ['HS256']);
dd($jwt); // Inspect claims for debugging
Custom User Mapping
use Auth0\SDK\User as Auth0User;
class CustomUserProvider implements UserProviderInterface {
public function loadUserByIdentifier($identifier) {
$auth0 = new Auth0([...]);
$user = $auth0->getUser($identifier);
return User::firstOrNew(['email' => $user['email']]);
}
}
Backchannel Logout
Route::post('/backchannel', function (Request $request) {
$auth0 = new Auth0([...]);
$auth0->backchannelLogout()->handle($request);
return response()->json(['success' => true]);
});
/backchannel.Rate Limiting
management_token_cache: cache.auth0_management # Use Redis for high traffic
auth() Helper: Avoid mixing with Auth0’s session. Use Auth::user() for Laravel users and $request->user() for Auth0 tokens.PersonalAccessClient:
$token = $auth0->getAccessToken();
$client = PersonalAccessClient::findOrFail(1);
$client->tokens()->create(['token' => $token, 'abilities' => ['*']]);
---
How can I help you explore Laravel packages today?