bshaffer/oauth2-server-httpfoundation-bridge
Symfony HttpFoundation bridge for bshaffer/oauth2-server, enabling OAuth2 requests and responses to work seamlessly with Symfony/Laravel HttpFoundation objects. Provides adapters to integrate the OAuth2 server with HttpFoundation-based apps.
Illuminate\Http components with oauth2-server-php, enabling seamless OAuth2 integration without framework-specific hacks. This aligns with Laravel’s middleware and service container patterns, allowing OAuth2 logic to be encapsulated in reusable layers (e.g., middleware, services).HttpFoundation objects, improving test reliability and maintainability.parse_str($_GET['code'])) with a single line of code (e.g., OAuth2\HttpFoundationBridge\Request::createFromGlobals()).laravel/passport) if used selectively, though not as a replacement. Avoids reinventing OAuth2 while maintaining Laravel’s ecosystem.bshaffer/oauth2-server-php (not league/oauth2-server). Migration effort if switching OAuth2 libraries later may require refactoring.composer.json:
"require": {
"symfony/http-foundation": "^6.4",
"bshaffer/oauth2-server-httpfoundation-bridge": "^1.7"
}
league/oauth2-server, laravel/passport, or a custom solution? If custom, assess rewrite effort vs. bridge benefits.oauth2-server-php supports them natively or via extensions.HttpFoundation compatibility could simplify mocking and assertions.Illuminate\Http stack, requiring no additional infrastructure. Ideal for Laravel APIs, SPAs, or microservices.oauth2-server-php (e.g., duplicate middleware, custom error handling).// app/Http/Middleware/OAuth2BridgeMiddleware.php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use OAuth2\HttpFoundationBridge\Request as BridgeRequest;
use OAuth2\HttpFoundationBridge\Response as BridgeResponse;
class OAuth2BridgeMiddleware
{
public function handle(Request $request, Closure $next)
{
// Convert Laravel Request to OAuth2 Request
$oauthRequest = BridgeRequest::createFromRequest($request);
// Process the request (e.g., token validation)
$server = new \OAuth2\Server();
$response = new BridgeResponse();
// Handle the OAuth2 request (e.g., token endpoint)
if ($request->is('/oauth/token')) {
return $server->handleTokenRequest($oauthRequest, $response);
}
// Proceed with the original request if not OAuth2
return $next($request);
}
}
Register in app/Http/Kernel.php:
protected $middlewareGroups = [
'web' => [
// ...
\App\Http\Middleware\OAuth2BridgeMiddleware::class,
],
];
OAuth2Bridge) into controllers for granular control:
// app/Services/OAuth2Bridge.php
namespace App\Services;
use OAuth2\HttpFoundationBridge\Request as BridgeRequest;
use OAuth2\HttpFoundationBridge\Response as BridgeResponse;
class OAuth2Bridge
{
public function createRequestFromLaravel(\Illuminate\Http\Request $request)
{
return BridgeRequest::createFromRequest($request);
}
public function createResponseFromLaravel(\Illuminate\Http\Response $response)
{
return BridgeResponse::createFromHttpFoundationResponse($response);
}
}
Use in controllers:
use App\Services\OAuth2Bridge;
public function token(Request $request, OAuth2Bridge $bridge)
{
$oauthRequest = $bridge->createRequestFromLaravel($request);
$response = new BridgeResponse();
$server = new \OAuth2\Server();
return $server->handleTokenRequest($oauthRequest, $response);
}
HttpFoundation objects (e.g., Symfony\Component\HttpFoundation\Request).Response assertions or PHPUnit matchers.php -v to verify.bshaffer/oauth2-server-php (not league/oauth2-server). If using League, evaluate migration effort or use a polyfill.$_GET/$_POST before the bridge processes requests (e.g., CSRF middleware may interfere)./oauth/token) and validate request/response transformations.curl) to ensure compliance with RFC 6749./authorize, /introspect) in stages, prioritizing high-traffic or critical endpoints.OAuth2\Storage\Exception\InvalidArgumentException).OAuth2BridgeMiddleware for all OAuth2 requests").bshaffer/oauth2-server-php and oauth2-server-httpfoundation-bridge forHow can I help you explore Laravel packages today?