kabiroman/octawire-auth-service-php-client-bundle
A Symfony bundle that integrates the OctaWire Auth Service PHP client, offering a convenient way to wire the client into Symfony applications through bundle configuration and service definitions. Best suited to projects already using the OctaWire authentication ecosystem.
Scope of this assessment: initial baseline established at v0.9.4. No prior assessment exists, so this document sets the reference point against which future releases will be diffed.
Architecture fit
JATP_METHODS_1.0.json spec. It supplies DTOs/mappers (OctowireUser, IssueTokenResponse, ValidateTokenRequest, HealthCheckResponse) plus an authenticator (OctowireTokenAuthenticator) and validator (TokenValidator).OctowireUser directly.userId with fallback to user_id, projectId with fallback to project_id, customClaims/custom_claims) is a transitional compatibility shim. Good for cutover, bad as a permanent state: it doubles the field surface and hides server-version mismatches that should fail loudly.Integration feasibility
kabiroman/octawire-auth-service-php-client: ^0.9.4 is itself pre-1.0. Two pre-1.0 packages stacked means caret ranges give weak guarantees; ^0.9.4 allows 0.9.x only, which is acceptable, but any 0.10.0 bump is a breaking-range exit.examples/integration-tests/, TLS and non-TLS example configs, TESTING.md. That is unusually complete for a 0.9.x.Argument #2 ($projectId) not passed in token validation and now passes required projectId into ValidateTokenRequest. Prior versions therefore had a defect on the core validation path. For a multi-tenant deployment, projectId is the tenant-scoping input — a missing or defaulted value is a cross-tenant trust boundary issue, not just a crash. Verify the fix, and verify behaviour when projectId is absent.Technical risk
expiresIn on IssueTokenResponse already changed signature within this line.null? A null userId or projectId propagating into authorization decisions is the worst-case failure.HealthCheckResponse (medium): healthy (bool) → status (string). Any existing probe, readiness gate, or alerting rule keyed on the old shape breaks silently. Anything treating a non-empty string as truthy inherits a subtle bug.Key questions
userId, projectId, customClaims.projectId sourced and validated in our deployment — static config, per-tenant lookup, or request-derived? Can it ever be empty and still validate?HealthCheckResponse.status have a defined enum of values, and which value indicates ready?Stack fit
TokenVerifier interface and AuthenticatedPrincipal value object, and let the Octowire adapter implement it. This contains the pre-1.0 blast radius to one directory.Migration path
0.9.4 exactly in composer.json — not ^0.9.4 — for the first integration cycle. Loosen only after we have a passing CI matrix of our own.Compatibility
projectId requirement makes this package inherently multi-tenant. Confirm at onboarding whether a single deployment serves one or many projects; the answer changes the config model and the test strategy.Sequencing
examples/integration-tests/ suite end to end. Deliverable: confirmed support matrix and a yes/no on framework fit.OctowireUser outside the adapter.projectId, unknown field casing, expired expiresIn, malformed health status. Explicitly test cross-tenant rejection.HealthCheckResponse.status to our probe contract in the same step as the feature, not later — it is already a breaking field and should not be retrofitted.Maintenance
octawire-auth-service-php-client and this package) means two upgrade cadences to reconcile. Track both on one watchlist.Support
Scaling
ValidateTokenRequest round-trips to the Auth Service per call, latency and availability of the Auth Service become our latency and availability. Confirm whether local verification (signature + claims) is supported; if so, use it and reserve remote validation for cache misses.expiresIn, plus a circuit breaker around the Auth Service. Neither is provided by the package as far as the notes indicate — assume we build both.projectId scoping should not require a per-request lookup. Load it once per tenant at boot.Failure modes
null; null principal reaches an authorization check. Mitigate with strict non-null assertions at the adapter boundary.projectId: the exact defect fixed here. If it can recur, validation either errors (safe) or silently scopes to a default tenant (severe). Test it explicitly on every upgrade.healthy: true → status: "...". Probes that coerce strings to booleans will report healthy incorrectly. Rename the check and add an assertion on the allowed values.expiresIn is a duration, not an absolute time; skew accumulates if we convert carelessly. Compute expiry once, server-side-relative, and log the delta.Ramp-up
projectId defect in this release's changelog is a reminder that the failure mode of this package is a tenant-isolation failure, and that class of bug is cheap to review and expensive to discover.How can I help you explore Laravel packages today?