surfnet/stepup-gssp-bundle
A Symfony bundle for implementing a Generic SAML Step-up Provider (GSSP). It enables applications to request extra authentication, such as a second factor, via SAML, with configurable routes, controllers, and services for integrating Stepup flows into PHP/Symfony projects.
Architecture fit. This is a Symfony 6 bundle, not a Laravel package. It is designed to plug into Symfony’s kernel, dependency-injection container, routing, security, and bundle configuration to provide GSSP device support in an OpenConext Stepup environment. Laravel does not have a compatible bundle model, so direct installation into a Laravel application is a poor architectural fit. Fit is strong only if the organization already runs Symfony and OpenConext Stepup/Stepup Gateway. The viable Laravel pattern is a dedicated Symfony GSSP service alongside the Laravel application, not a Composer dependency inside Laravel.
Integration feasibility. Direct integration into Laravel is not feasible without significant adapter work or a port. Feasible approaches are: (1) deploy the bundle as a standalone Symfony 6 service that owns GSSP/SAML endpoints and device-step-up flows, with Laravel integrating through redirects or a narrow API; (2) port the required behavior into a Laravel package, which is high-effort because much of the value is Symfony-specific wiring; or (3) use only underlying SAML/GSSP libraries and reimplement the integration. The first option is the lowest-risk path. Key boundaries must be explicit: Laravel owns application UX and administration; the Symfony service owns SAML metadata, certificates, ACS endpoints, device registration/removal, and step-up protocol handling.
Technical risk. This is security-sensitive authentication infrastructure. SAML signature validation, certificate rotation, replay protection, session binding, metadata correctness, and clock synchronization are all critical. Adoption signals are very weak: 1 star and 0 dependents indicate limited community validation. The package appears tied to the OpenConext/Stepup ecosystem and may assume specific gateway, middleware, or deployment conventions. License risk is low under Apache-2.0, but maintenance and security-response risk are material. The release history suggests some activity, but a TPM should not treat that as an SLA.
Key questions. Which PHP and Symfony versions are supported? Can the bundle run outside a full Stepup deployment? Which external services, gateway versions, and metadata conventions are required? Does it support the required GSSP specification version and device types? What is the test coverage and security-review history? Who maintains it, with what support path? Does it require sticky sessions or shared session storage? Does it expose APIs, or only SAML/browser flows? How are certificates, entity IDs, ACS URLs, and metadata ownership handled? What is the upgrade and deprecation policy? Can Laravel remain the primary application session owner, or must the GSSP service own authentication state?
Stack fit. Poor fit for a Laravel monolith. Good fit for a Symfony/OpenConext deployment. Recommended approach: run the bundle as a dedicated Symfony 6 GSSP service behind the same ingress/security perimeter, with Laravel integrating through SAML redirects or a small internal API. Do not attempt to load Symfony bundle configuration, compiler passes, routes, or event subscribers inside Laravel.
Migration path. Begin with a proof of concept in a clean Symfony 6 application using the production PHP version. Configure the bundle against a non-production Stepup Gateway, validate device enrollment, step-up, and removal flows, and capture required metadata and certificate settings. Containerize the service, externalize configuration and secrets, add health checks and observability, then integrate Laravel’s UX through redirects or API calls. If upstream compatibility blocks the POC, fork the bundle into an internally owned Symfony service rather than forcing it into Laravel.
Compatibility. Validate PHP and Symfony constraints, OpenConext Stepup Gateway and middleware versions, SAML certificate algorithms, TLS termination, proxy headers, and clock synchronization. If the service uses sessions, confirm whether load balancing requires sticky sessions or a shared session store. Cross-domain cookies and SameSite settings must be tested if Laravel and the GSSP service are on different hosts. Laravel version compatibility is mostly limited to the HTTP/client integration layer, not the bundle itself.
Sequencing. First make the architecture decision: sidecar Symfony service versus port versus no-go. Then run the protocol POC against the gateway and complete a security threat model. Build the service with configuration, metadata, certificate rotation, and monitoring. Integrate Laravel UX and administration after the protocol works. Finish with load, high-availability, and failure-mode testing, then pilot and cut over with a rollback path. Do not start with Laravel UI work before the SAML/GSSP flow is proven.
Maintenance. Expect ongoing Symfony/PHP dependency patching, SAML certificate and metadata rotation, and gateway compatibility work. Low adoption increases bus factor and reduces the likelihood of community fixes. Pin versions, track upstream releases, and assume internal ownership or a paid support arrangement. Apache-2.0 permits forking if upstream maintenance becomes insufficient.
Support. This is an authentication-critical path. Support must include runbooks for certificate expiry, metadata mismatch, gateway outage, and failed step-up flows. The community support model is unclear, so a TPM should secure an escalation path to OpenConext/SURF maintainers or an internal Symfony/SAML specialist before production.
Scaling. The service can likely scale horizontally if it is stateless or uses a shared session store, but that must be verified. SAML redirects and gateway calls add latency and create a hard dependency on the Stepup Gateway. Plan high availability for both the GSSP service and gateway, health checks, rate limiting, and backup/restore for device registration data.
Failure modes. Common failures include expired or mismatched certificates, metadata drift, clock skew, invalid signatures, gateway unavailability, session loss, cookie/SameSite problems, misconfigured ACS or entity IDs, replay protection issues, and dependency upgrades that break protocol behavior. Monitoring should cover authentication success rate, SAML error codes, latency, certificate expiry, gateway health, and device-registration anomalies.
Ramp-up. The team needs Symfony bundle/container knowledge plus SAML, GSSP, and OpenConext Stepup knowledge. A Laravel-only team will require training or a dedicated service owner. Budget a focused spike for the Symfony service and gateway integration, followed by security review and operational hardening; porting the bundle into Laravel should be treated as a separate, larger project.
How can I help you explore Laravel packages today?