Microsoft Entra ID SAML SLO: with 2+ signed-in accounts, Entra sends a LogoutRequest (not a LogoutResponse) to the initiating SP's Logout URL

Jun Huynh 20 Reputation points
2026-06-21T10:43:55.07+00:00

Environment

  • IdP: Microsoft Entra ID (SAML 2.0 single sign-out, HTTP-Redirect binding)
  • SP: our application (Entity ID / Issuer: https://sp.example.com)
  • SLO "Logout URL" registered in the enterprise app: https://sp.example.com/saml/logout
  • Single SP / single enterprise app; one user identity (NameID) per test
  • Browser: Chromium-based

Context

We implement SP-initiated SAML Single Logout. The SP sends a LogoutRequest to Entra's SLO endpoint (HTTP-Redirect), and handles inbound messages on the registered Logout URL.

Scenario A — ONE Microsoft account signed in (works as documented)

  1. SP redirects the browser to Entra with an SP-initiated LogoutRequest:
<samlp:LogoutRequest ID="id-..." ...>
<saml:Issuer>https://sp.example.com</saml:Issuer>
<saml:NameID Format="...persistent">REDACTED</saml:NameID>
<samlp:SessionIndex>_xxxxxxxx-aaaa</samlp:SessionIndex>
</samlp:LogoutRequest>
  1. Entra replies with a LogoutResponse delivered to our Logout URL (SAMLResponse=...), InResponseTo = the ID of our request, Status = Success.
  2. Logout completes and the user is redirected back to our app. ✅

Scenario B — TWO or more Microsoft accounts signed in (problem)

  1. Same SP-initiated LogoutRequest as above.
  2. Entra shows the "Pick an account — Which account do you want to sign out of?" page. We select the account.
  3. Instead of a LogoutResponse, Entra loads our Logout URL inside a hidden iframe with a LogoutRequest (SAMLRequest=..., signed):
<samlp:LogoutRequest ID="_yyyyyyyy-bbbb" ...
       Destination="https://sp.example.com/saml/logout">
<Issuer>https://sts.windows.net/<tenant-id>/</Issuer>
<NameID Format="...persistent">REDACTED</NameID>
<samlp:SessionIndex>_xxxxxxxx-aaaa</samlp:SessionIndex>
</samlp:LogoutRequest>

Note: the SessionIndex (_xxxxxxxx-aaaa) is identical to the one our SP-initiated LogoutRequest carried - i.e. it targets the very session that initiated the logout.

  1. Our SP answers with a Success LogoutResponse back to Entra's /saml2 endpoint, which returns HTTP 200 "OK". But the top-level browser is never redirected back to our app and stays on the Entra /logoutsession page.

Expected behavior

Per the documentation:

"If one of the other participants sends a LogoutRequest to the Microsoft identity platform (the session authority), it will send a LogoutRequest back to all the session participants except the participant who sent the initial LogoutRequest."

Since our SP is the participant that sent the initial LogoutRequest (and the SessionIndex matches), we expect Entra to return a LogoutResponse to our Logout URL exactly as in Scenario A rather than sending us a new LogoutRequest.

Actual behavior

With 2+ signed-in accounts, after the "Pick an account" step, Entra sends a LogoutRequest (via hidden iframe) to the initiating SP's Logout URL for the same SessionIndex, instead of a LogoutResponse. No final top-level redirect back to the SP occurs.

Question

Why, in the multi-account case, does Entra send a LogoutRequest to the initiating SP's Logout URL (the participant that sent the initial LogoutRequest) instead of a LogoutResponse, which appears to contradict the "except the participant who sent the initial LogoutRequest" statement in the docs? Is this expected behavior after the "Pick an account" selection, and if so, what is the supported way to complete SP-initiated SLO (and return the user to the SP) in this scenario?

Microsoft Security | Microsoft Entra | Microsoft Entra ID
0 comments No comments

Answer accepted by question author
VEMULA SRISAI 13,985 Reputation points Microsoft External Staff Moderator
2026-06-22T02:09:33.8533333+00:00

Hello Jun Huynh,

You’re observing expected behavior in Microsoft Entra ID, even though it looks inconsistent with the documentation at first glance.

In Scenario A (single account), Entra can maintain a clear SP‑initiated logout transaction, so it returns a LogoutResponse to your SP as expected. However, in Scenario B (multiple signed-in accounts), the flow changes after the**“Pick an account”** step. At that point, Entra no longer continues the original SP‑initiated transaction. Instead, it effectively starts a new, IdP‑driven logout flow and performs front‑channel logout across session participants.

As part of this front‑channel SLO implementation, Entra can send LogoutRequest messages (via hidden iframe) to registered logout URLs, even to the SP that initiated the logout. This aligns with the platform’s requirement that applications must always be able to handle incoming LogoutRequest messages, regardless of who initiated the flow.

Because this is a front‑channel (iframe-based) propagation, it does not guarantee a final top-level redirect back to your SP, which is why the browser remains on the Entra /logoutsession page even though your SP responds successfully.

How to handle this correctly

  • Your SP should support both LogoutRequest and LogoutResponse and not rely only on receiving a LogoutResponse.
  • Treat an incoming LogoutRequest (even for the same SessionIndex) as a valid signal to terminate the session.
  • Do not depend on Entra to always redirect the user back to your application after logout.
  • If a consistent UX is required, minimize multi-account scenarios (for example, by avoiding the account picker where possible).

Conclusion

This behavior is expected in multi-account scenarios due to Entra’s front‑channel logout orchestration. The “exclude initiating participant” rule applies only when the original SLO transaction is preserved end‑to‑end, which is not the case after account selection.

Was this answer helpful?

1 person found this answer helpful.

0 additional answers

Sort by: Most helpful

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.