Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Guzzle Wsse Middleware Laravel Package

eightpoints/guzzle-wsse-middleware

Guzzle middleware that adds WS-Security (WSSE) UsernameToken authentication to outgoing requests. It generates the nonce, created timestamp and password digest automatically, so SOAP and other WSSE-protected APIs can be called through Guzzle with minimal setup.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • The package is a Guzzle middleware plugin that injects WSSE (UsernameToken-style) authentication headers into outbound HTTP requests. In a Laravel/PHP stack this fits naturally because Laravel's Http facade and most SDKs ride on Guzzle, so the plugin can be attached to the client's handler stack with no architectural disruption.
  • Fit is conditional: it only makes architectural sense when the downstream service mandates WSSE (typically SOAP/legacy enterprise APIs, partner gateways, or WS-Security-protected endpoints). It is not a general-purpose auth layer and does not replace OAuth2/Bearer token flows.
  • The middleware is narrow and composable — it sits alongside other Guzzle middleware (retry, logging, circuit breakers) without altering the surrounding application architecture. That makes it a low-blast-radius addition when the target integration genuinely needs it.

Integration feasibility

  • Trivially installable via Composer and registered per-client or globally via HandlerStack::push(). The API surface is small (a plugin class plus credential/nonce configuration), so a proof-of-concept is a matter of hours, not days.
  • Integration with Laravel's Http client requires either (a) building the Guzzle client explicitly and pushing the middleware, or (b) resolving the underlying client via a macro/extension. Both are well-understood patterns.
  • No runtime services or infrastructure are required — the plugin is pure request transformation, so there is no new deployment footprint.

Technical risk

  • Staleness is the dominant risk. Last release was 2019-08-13, roughly six years stale. Guzzle has moved through major versions since then; compatibility with Guzzle 8 / current PHP 8.3+ is unverified and likely requires patching.
  • Zero dependents means essentially no battle-testing in the wild. Expect undiscovered edge cases in header encoding, nonce generation, and digest handling.
  • WSSE is a legacy protocol. The security model (password digest, nonce, timestamp) is weaker than modern token schemes and demands correct clock synchronization and replay protection. Misconfiguration is a silent-failure risk.
  • Single-maintainer / abandonment exposure. MIT license is permissive, which helps, but there is no active maintenance signal. Treat the code as "vendor it or fork it," not "depend on it."

Key questions

  • Which WSSE variant does the target service require — UsernameToken plain text, PasswordDigest, or a custom digest/salt? Does the plugin support it out of the box?
  • Does it function on Guzzle 7.x and 8.x, and on the PHP version our stack targets? If not, how large is the patch?
  • Who owns the fork if we vendor it, and what is the upstream-watch cadence?
  • Is the required authentication strictly WSSE, or can the downstream service be negotiated toward a supported modern auth scheme?
  • How are nonces and timestamps managed — per-request generation, replay window, and clock-skew tolerance?

Integration Approach

Stack fit

  • Strong within a narrow lane: Laravel + Guzzle is the canonical environment for this plugin, and the middleware composes cleanly with existing Guzzle middleware. It does not touch the framework's HTTP kernel, queues, or service container, so it won't fight Laravel conventions.
  • Weak outside that lane: any stack that has moved to Symfony HttpClient, cURL direct, or a non-Guzzle transport gains nothing.

Migration path

  • Because the package is small, the realistic path is vendor-and-fork, not "depend and hope." Composer's path or a committed packages/ directory lets us pin a patched copy and update Guzzle/PHP constraints ourselves.
  • If a future replacement is needed (e.g., the service modernizes to OAuth2 or mTLS), the middleware abstraction means only the handler stack registration changes — call sites stay stable. The migration is contained to the HTTP client bootstrap.

Compatibility

  • Verify Composer constraints against guzzlehttp/guzzle (likely ^6/^7 originally) and PHP (^7.x on the 2019 release). Expect to widen constraints and re-run under PHP 8.x and the current Laravel HTTP client.
  • Validate header encoding and XML escaping against the actual target service — this is where stale packages most often break.

Sequencing

  1. PoC against a sandbox/spec of the target WSSE service — confirm header format, digest algorithm, nonce/timestamp behavior end-to-end.
  2. Fork and vendor with updated Composer/PHP constraints; add tests around header generation.
  3. Integrate at the service layer via a dedicated Guzzle client factory, keeping the plugin out of general-purpose HTTP calls.
  4. Harden with retry-on-401, clock-skew handling, and redacted logging before production rollout.

Operational Impact

Maintenance

  • High ownership burden relative to package size: we are effectively the maintainers. Budget for periodic Guzzle/PHP compatibility reviews and a documented fork policy. MIT licensing makes this legally clean; the cost is engineering time, not legal risk.

Support

  • No commercial or active community support. Internal documentation, runbooks, and a named owner are mandatory. Escalation paths must go to our own platform team, not upstream.

Scaling

  • Negligible runtime cost: header generation is per-request CPU work (digest + nonce) with no external calls or state. The middleware is stateless and scales horizontally with the application. The only scaling concern is clock synchronization across nodes for timestamp validation — enforce NTP discipline across the fleet.

Failure modes

  • Silent auth failures presented as generic 401/500 from the downstream service; the plugin does little to explain why the header was rejected. Instrument the client to log (redacted) WSSE headers and downstream error bodies.
  • Clock skew producing timestamp-out-of-window rejections — subtle, intermittent, and node-dependent.
  • Nonce reuse or weak nonce generation triggering replay protection on the server.
  • Composer/Guzzle drift breaking the handler stack on a routine dependency bump.
  • Secret leakage if request logging is enabled without redaction of password digests and nonces.

Ramp-up

  • Low for any developer comfortable with Guzzle middleware — the API is small and the patterns are familiar. The learning curve is conceptual, not code: engineers must understand WSSE semantics (digest construction, nonce/timestamp lifecycle, replay windows) to debug failures confidently. Plan a short internal knowledge-share and pair it with a reference implementation plus a troubleshooting runbook; that investment pays back immediately the first time a clock-skew failure appears in production.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
skyraptor/chatter
edlugz/sasapay
abbasudo/artisan-route
mirvan/ippanel
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource