novosga/oauth-server-bundle
OAuth 2.0 server bundle for the NovoSGA ecosystem, providing authorization and token endpoints so applications can issue access tokens and secure API access. Integrates into PHP projects to handle client authentication, grants, and protected resources.
What the package actually is. novosga/oauth-server-bundle is a maintained-by-one fork of friendsofsymfony/oauth-server-bundle — a Symfony bundle, not a Laravel package. It ships a Symfony DI extension, services.yaml/XML definitions, Doctrine ORM mappings for Client, AccessToken, RefreshToken and AuthCode, and a firewall/security listener that plugs into Symfony's security.firewall chain. Token issuance and validation are delegated to the legacy bshaffer/oauth2-server-php library. There is no service provider, no Laravel container binding, no Eloquent model, and no Laravel routing integration.
Architecture fit. Poor for a Laravel codebase. The bundle assumes Symfony's HttpKernel, EventDispatcher, Security component, Doctrine bundle and bundle config loading. To make it run under Laravel you would have to either (a) boot a Symfony microkernel alongside Laravel, (b) manually reimplement the bundle's service wiring against the underlying bshaffer library, or (c) rewrite it. All three are equivalent to building a small in-house OAuth server, at which point the package contributes almost nothing but a set of Doctrine entities you would have to port to Eloquent anyway.
Integration feasibility. Low confidence. Two stars and zero dependents means no production usage signal, no third-party issue corpus, no community answers. The fork exists because the NovoSGA queue-management product needed a Symfony 5-compatible OAuth server — it is a downstream artifact, not a general-purpose product. The 2022-03-29 release date means it has not tracked Symfony 5.4 LTS end-of-life (security support ended November 2025), nor PHP 8.2+ deprecations, nor any subsequent OAuth security guidance.
Technical risk — this is the dominant factor.
friendsofsymfony/oauth-server-bundle is flagged abandoned on Packagist and bshaffer/oauth2-server-php is itself end-of-life. You inherit unpatched code beneath a thin fork.Key questions to answer before spending further evaluation time.
league/oauth2-server used directly) fail any functional requirement this fork satisfies? No plausible gap is visible.friendsofsymfony/oauth-server-bundle? If it is only a composer constraint bump, there is no value to justify the fork.Stack fit. Effectively zero for Laravel. The stack-fit matrix is: Laravel + Passport = native; Laravel + Sanctum = native; Laravel + this bundle = unsupported bridge. For Symfony 5 applications the fit is acceptable but on an end-of-life framework branch.
Recommended decision. Do not integrate. This is a reject with rationale, not a defer. The score profile (0.07 overall, 18.9 opportunity, 2 stars, 0 dependents) plus the abandoned upstream lineage is sufficient to close the evaluation without a proof-of-concept.
If a full OAuth 2.0/2.1 authorization server is a confirmed requirement, the migration path is:
league/oauth2-server, the actively maintained successor to bshaffer/oauth2-server-php) for first-party + third-party token issuance, or Sanctum if scopes/third-party clients are not needed.league/oauth2-server directly behind a thin Laravel adapter you own — this is the same amount of integration work as bridging the Symfony bundle, but on a maintained foundation with a CVE process.client, access_token, refresh_token, auth_code tables with expiry columns and a revoked flag are a sound schema shape regardless of implementation.If the incumbent Symfony/NovoSGA app is the real target (the only scenario where this bundle is already deployed):
TokenIssuer interface so downstream code never touches bundle classes.league/oauth2-server on a parallel branch.Compatibility sequencing. Any path here requires auditing PHP version constraints, Doctrine ORM 2.x vs 3.x, and Symfony 5 firewall behavior against your current dependency set. Budget this as discovery work, not implementation — and only after question 2 above is answered negatively.
Maintenance. You become the de facto maintainer. There is no release cadence to ride, no one to upstream a patch to, and no expectation that a PHP 8.3/8.4 or Symfony 6 fix will arrive. Every future framework or PHP upgrade is a fork-and-patch exercise. Annualized cost is small in hours but unbounded in timing risk — it lands during your upgrade windows, not the maintainer's.
Support. Zero. No vendor, no community forum, no dependents to consult. Escalation for a token-handling defect is "read the bshaffer source and the OAuth RFCs yourself." For an authorization server, that is an unacceptable support posture; the failure mode of a token bug is credential exposure, not a broken page.
Scaling. Token state is database-backed, so every authenticated request performs a token lookup. That makes the SQL database a hard dependency on the request hot path and a single point of failure for the whole API. Mitigations exist — cache validated tokens with TTL aligned to token expiry, index access_token.token and expires_at, and implement a scheduled purge of expired rows — but none of them are provided by the bundle. Left unmanaged, the token tables grow unbounded and lookup latency degrades over months. There is no JWT/stateless option here, so horizontal scale is bounded by database read capacity rather than by your app tier.
Failure modes to plan for.
Ramp-up. Laravel developers will find nothing familiar: no Eloquent, no Artisan, no service provider, and the relevant knowledge is Symfony's security firewall plus raw OAuth 2.0 grant-flow mechanics. A competent engineer needs roughly two to three weeks to be productive inside this bundle, versus a few days for Passport. That ramp-up cost is spent acquiring knowledge of a dead-end stack — it does not transfer to the replacement you will eventually build.
Net. The opportunity score of 18.9 against an adoption score of 0.07 reads as "interesting artifact, not an adoption candidate." Recommend closing the evaluation with a written rationale and directing effort to Passport/Sanctum.
How can I help you explore Laravel packages today?