It's 2025 and we are still arguing about xml tags while the rest of the world has moved on to json and sleek oidc flows. You'd think a tech stack from the early 2000s would be dead by now, but in the world of enterprise identity, saml is basically the cockroach that won't quit.
Honestly, it’s a weird paradox. We love to complain about how "heavy" or "verbose" saml feels compared to modern stuff, yet it remains the undisputed king of the b2b world. Why? Because when a ceo at a massive bank or a healthcare giant signs a contract, they don't care about your "modern" api-first approach—they care about their existing okta or microsoft entra id (formerly azure ad) setups.
The reality is that enterprise readiness isn't about using the newest shiny tool; it's about meeting the customer where they actually live. Here is why we're still stuck with xml:
I've seen this play out in everything from retail to finance. A large hospital system won't just "trust" your new app; they want to externalize authentication to their own idp so they can kill access the second a doctor leaves the practice. As Descope points out, this removes the burden of password management from the app developer entirely.
While some older reports had wilder numbers, current market data suggests the broader Identity and Access Management market—which saml dominates for enterprise—is growing steadily at a CAGR of around 13%, proving this "legacy" tech isn't going anywhere.
But saml isn't just about logging in—it's about the trust handshake that happens behind the scenes. Next, we'll look at how that actually works under the hood.
Ever wonder why your browser does a weird little dance of redirects when you click "Login with SSO"? It’s basically a high-stakes handshake where three different parties have to agree on who you are without actually sharing your password.
In the saml world, we talk about the Identity Provider (IdP) and the Service Provider (sp). But the real unsung hero is the User Agent—aka your browser.
relaystate to keep track of where the user was trying to go before the auth redirect interrupted them.When that xml finally hits your endpoint, it’s a big, messy envelope. According to WorkOS, saml is built on xml, which makes it more verbose than json, but that "heaviness" is what allows it to carry so much metadata.
Inside, you’ll find Assertions. These are statements from the IdP saying, "I know this guy, he's an admin, and he's in the Finance department."
Watch out for Assertion Wrapping: This is a nasty attack where a hacker injects malicious xml nodes into the message. If your parser is weak, it might get confused and read the fake "admin" node instead of the real, signed content. This is why we use battle-tested libraries—they're designed to ignore any unsigned junk and only trust the canonicalized, signed parts of the xml.
As Okta points out, the sp doesn't even know who the user is until that assertion comes back. It's a "trust but verify" model where the verification step is everything.
Honestly, if you're building this from scratch, just don't. Use a library. Handling xml namespaces and canonicalization manually is a great way to end up in a security post-mortem.
So, you're looking at the auth landscape and wondering why we have multiple "standards" that don't always play nice together. It's easy to get confused when everything is just an acronym.
The technical differences are what really matter here. While oidc uses json web tokens (jwt) and relies on simple http headers, saml uses the heavy xml soap-style transport. This makes saml much better at carrying complex "federated" trust—where one organization trusts another's entire directory structure—whereas oidc is often more "chatty" and requires more back-and-forth server calls.
I've seen devs try to force oidc on a bank just because they hate xml, only to realize the bank's idp only speaks saml. It’s about technical compatibility with their existing infrastructure.
Next up, we’re going to look at the "Procurement Wall" and why your sales team is probably screaming for this integration right now.
If you want to move from $50/month customers to $50,000/year contracts, you have to climb the procurement wall. This isn't just about code; it's about business requirements that the big guys won't budge on.
Building your own saml service from scratch to scale this wall is basically a rite of passage that nobody actually wants to go through. It starts with "how hard can xml be?" and ends with you crying over x.509 certificate rotation at 3 a.m. on a tuesday.
If you're going to do this right, you need to think about what happens when things break. Because they will. I once saw a retail giant lose half their workforce's access because an admin accidentally deleted a public key.
So you finally got the saml flow working and the sales team is happy, but now the real fun starts. You've got a security audit coming up and some giant bank wants to know if your auth is actually "enterprise-grade" or just a pile of xml hacks.
First thing is mfa. Even if your app doesn't have a native mfa prompt, you should be enforcing it at the idp level. The beauty of saml is that you offload the "how" of auth to the customer. If they use hardware keys or biometrics, that's their business—you just need to make sure the assertion proves it happened.
I've seen a healthcare provider fail an audit because they didn't rotate their public certificates. Don't be that guy. Use a metadata url that updates automatically so you don't have to manually swap keys at 2 am.
At the end of the day, saml is still winning the b2b war because it's the only language the big players speak fluently. It’s verbose, it’s old, but it works. Stick to the standards, don't hand-roll your xml, and you'll be fine.
*** This is a Security Bloggers Network syndicated blog from SSOJet - Enterprise SSO & Identity Solutions authored by SSOJet - Enterprise SSO & Identity Solutions. Read the original post at: https://ssojet.com/blog/architecting-enterprise-readiness-saml-b2b-auth