Skip to content

Native SAML Logout: Closing the Loop on Session Consistency for Mautic Integrations

Today, the Helpifyr stack closes a critical gap in SAML-based integrations by implementing a true native Service Provider logout for Mautic, ensuring that user sessions are reliably terminated across both application and identity layers. This shift removes persistent session ghosts, eliminates cache confusion, and unlocks a foundation for secure, auditable sign-out flows across the platform.

Jadda Helpifyr3 min read
Native SAML Logout: Closing the Loop on Session Consistency for Mautic Integrations

At a glance

136

merged changes

21

code projects involved

Most changes in

  • jhf-deployment15
  • jhf-openclaw-env13
  • jhf-warp10

Underlined terms are explained: just hover or tap.

Picture a user logging out of a CRM, expecting their session to be fully terminated. Instead, a subtle flaw leaves their authentication session alive, allowing the next browser visit to slip past what should be a hard stop. For operators and auditors, this is more than an inconvenience-it’s a compliance and data boundary risk. Until today, our Mautic SAML integration used a browser callback to simulate logout, but couldn’t guarantee that both the Service Provider (Mautic) and the Identity Provider (Keycloak) agreed on the session’s termination. The result: unpredictable cache states, lingering authentication cookies, and a sign-out flow that sometimes worked, sometimes didn’t. That ambiguity ends now.

Why This Day Mattered

With the native SAML Service Provider logout now wired into Mautic, operators gain a reliable guarantee that user sign-out is enforced at both the application and identity layers. This eliminates the risk of session persistence after logout, closes the window for privilege escalation or session replay, and ensures that audit trails reflect the true state of user access. For developers, it means integrations and downstream automation can depend on a single, canonical logout event-no more compensating for partial sign-outs or cache desynchronization. For end users, it translates to a predictable, secure experience: when they log out, they stay logged out.

The closed UTC day 2026-08-24 resolved into 136 merged PRs across 21 repos, led by jhf-deployment (15), jhf-openclaw-env (13), jhf-warp (10).

What Actually Changed

The stack now issues a native SAML logout request from Mautic to the Identity Provider (Keycloak), completing the full SAML logout protocol instead of relying on a browser callback or partial session cleanup. The deployment layer emits the correct Assertion Consumer Service (ACS) URL in SAML AuthnRequests, and the router cache is invalidated as part of the logout flow, ensuring that no stale session data lingers. Ownership of cache entries is now preserved during logout, preventing cross-user leakage and ensuring that the cache state matches the authenticated user context. The logout callback is fully SP-initiated and native, not just a UI redirect.

Why It Holds Better Now

By adopting the true SAML SP logout flow, the system now guarantees that both Mautic and Keycloak agree on the session’s lifecycle. This closes the door on session ghosts-users cannot be unexpectedly reauthenticated via a lingering IdP session or browser artifact. The explicit cache invalidation and ownership preservation mean that stale authentication artifacts are eliminated, and the risk of session fixation or replay is removed. The logout event is now a single, auditable point of truth, making both operational monitoring and compliance reporting straightforward and reliable.

Want to Know More?

How might this full-fidelity logout flow enable secure, cross-application session management for future product integrations? Could we extend this guarantee to OAuth and other federated protocols for a unified sign-out experience across the platform?

Terms in this post

PR
Pull request: a reviewed code change that gets merged into the project.
repo
Repository: a code project under version control.
CRM
Customer relationship management: contacts, requests and sales opportunities.
operator
The person or team running the system.

What would this look like in your company?

A pilot shows it with a real process.

Request a pilot

More on Identity and access

See all
Operator-First Identity Bootstrapping: Breaking the Vendor Dependency LoopIdentity and access

4 min

Operator-First Identity Bootstrapping: Breaking the Vendor Dependency Loop

Today marks a fundamental shift in how customer environments on the Helpifyr / JaddaHelpifyr stack are initialized: first-owner identity and access are now established by the deploying operator, not by a pre-seeded vendor artifact. This closes a multi-year gap in source-of-truth guarantees for customer deployments, enabling operators to create, verify, and assert initial superadmin authority without shadow credentials or vendor-side initialization. The stack now guarantees that the very first root authority is provably local, auditably bound to the operator's actions, and never hidden in a vendor-controlled bootstrap script.

Read
Identity Bootstrapping Without Vendor Shadows: Operator-First Realm Initialization for Customer DeploymentsIdentity and access

4 min

Identity Bootstrapping Without Vendor Shadows: Operator-First Realm Initialization for Customer Deployments

Today’s engineering work unlocks direct, vendor-neutral identity bootstrapping for new customer environments. By decoupling realm initialization from vendor image artifacts and shifting to attested, customer-bound Keycloak provider packs, operators gain unmediated control over Helpifyr’s identity layer. This change eliminates the last vestiges of vendor reference leakage during customer onboarding, providing operators and downstream integrators with a clean, auditable, and policy-compliant path from first boot to live realm configuration.

Read