Awesome SAML Tracer

Debugging SAML SSO

A field guide for IAM engineers — and the users who test their patience.

Picture this: it's 2pm on a Tuesday. Your Slack lights up. "SSO is broken." That's it. No error message. No screenshot. No reproducible steps. Just vibes and a vague sense of dread. Somewhere, a user is staring at a redirect loop, wondering why clicking "Login with company SSO" has started an existential journey instead of opening their dashboard.

Welcome to SAML debugging — where the errors are cryptic, the payloads are base64-encoded XML, and the answer is almost always something the Identity Provider is doing wrong. (It's always the IdP.)

This guide covers how SAML SSO actually works, what's hiding inside a SAMLResponse, the most common assertion errors and how to fix them, and — crucially — how to stop playing telephone between your end users and your IAM team when things go wrong.

How SAML SSO Actually Works (In Plain English)

Before we debug it, let's understand what's supposed to happen. SAML 2.0 (Security Assertion Markup Language, for those who enjoy typing out acronyms) is the protocol that lets your users click "Sign in with [Company]" and end up authenticated without anyone — your app included — ever seeing their password. Magic! Except it's not magic. It's XML flying around in browser redirects, and once you understand the choreography, most SSO debugging becomes a lot less mysterious.

Here's the SP-initiated flow, step by step:

  1. The user visits your app (the Service Provider, or SP) and clicks "Login with SSO."
  2. The SP generates an AuthnRequest — a signed XML document saying "hey IdP, please authenticate this person for me."
  3. The SP base64-encodes and (for redirect bindings) deflate-compresses this request, then redirects the user's browser to the Identity Provider (IdP) — Okta, Microsoft Entra ID, Google Workspace, Ping, whatever your company runs.
  4. The IdP receives the request, authenticates the user (they're usually already logged in via SSO session), and generates a SAMLResponse.
  5. The IdP posts the SAMLResponse back to the SP via a browser-based form POST. The browser is just the delivery courier here — it has no idea what it's carrying.
  6. The SP validates the response, extracts the user's identity and attributes, and logs them in.

Simple, right? Except every single one of those steps is an opportunity for something to go wrong — which is why SAML SSO troubleshooting is its own art form.

Anatomy of a SAMLResponse (What's Actually in That Blob)

The SAMLResponse that gets posted to your SP is a base64-encoded chunk of XML containing a SAML Assertion. If you've ever tried to decode one manually — copy it out of DevTools, paste into a base64 decoder, then try to read minified XML in a text editor — you know the experience is roughly equivalent to reading a novel through a keyhole.

But here's what's hiding in there:

Issuer

Who sent this assertion. Should match your IdP's entity ID exactly. One wrong character — a trailing slash, http vs https — and authentication fails immediately. No trial, no appeal, no useful error message.

Subject / NameID

Who is being authenticated. Usually an email address or a persistent opaque identifier. This is what your SP uses to tie the SAML assertion to a user account. If your SP is looking for an email and the IdP is sending a UUID, nobody's getting in.

Conditions

Two timestamps that will ruin your day if you're not careful:

Clock skew between your IdP and SP servers? Even a two-minute drift can cause "SAML response is not yet valid" errors that appear randomly and reproducibly only for users in specific time zones. This is the SSO equivalent of your milk expiring five minutes before you wanted cereal.

AttributeStatement

The good stuff. This is where the IdP sends user attributes — email, first name, last name, groups, roles, department, employee ID, whatever you've configured. If a user can log in but has the wrong permissions, it's almost always because an attribute is missing, incorrectly mapped, or named differently than what the SP expects. firstName vs first_name vs urn:oid:2.5.4.42 — IAM engineers know this particular pain intimately.

Status

Whether the IdP actually succeeded. A StatusCode of urn:oasis:names:tc:SAML:2.0:status:Success means good news. Anything else — AuthnFailed, NoPassive, RequestDenied — means the IdP rejected the request for a reason it may or may not deign to explain in the StatusMessage.

Signature

The entire assertion is signed with the IdP's private key. The SP validates it with the IdP's public certificate. Expired certificate? Wrong certificate configured on the SP side? The signature validation will fail and the user will see an error that tells them absolutely nothing useful about why.

Common SAML SSO Errors (And What They Actually Mean)

"SAML authentication failed" is the check-engine light of error messages — technically accurate, completely useless. Here's a translation guide for the errors IAM engineers see most often:

"NotBefore condition not met" / "Response expired"

Translation: Clock skew. Your IdP and SP think they live in different times. Sync your NTP servers and/or increase the allowed clock skew tolerance in your SP configuration. Most SPs allow ±5 minutes; bump this first before assuming something is deeply wrong.

"Audience restriction check failed"

Translation: The SAMLResponse was addressed to a different SP entity ID than the one that received it. Check that the SP metadata registered in your IdP has the exact right entity ID — https://myapp.com and http://myapp.com are different strings, and SAML doesn't give partial credit.

"InResponseTo attribute does not match"

Translation: The response references an AuthnRequest ID that the SP has forgotten about. Common causes: the user opened the login page in two tabs simultaneously, the SP restarted between the AuthnRequest and SAMLResponse, or session cookies got cleared mid-flow. Tell the user to close all tabs, clear cookies, and try again from a fresh browser window.

"User is not assigned to this application"

Translation: This isn't really a SAML protocol error — the IdP just refused to authenticate the user for this SP because they haven't been granted access. The fix is in the IdP: assign the user (or their group) to the application. IAM's bread and butter.

"Signature validation failed"

Translation: Something is wrong with the certificate chain. Start by checking that the signing certificate configured on the SP matches the one the IdP is currently using. IdPs sometimes rotate certificates without warning — or with a warning that went to the email alias nobody reads.

The Support Ticket Problem: Getting SAML Data From End Users

Here's where things get genuinely hard — not technically hard, but humanly hard.

A user has an SSO problem. You, the IAM engineer, need to see their SAMLResponse to diagnose it. The SAMLResponse only exists inside the user's browser for a fraction of a second — it's in a form POST that happens and immediately redirects. How do you get it?

Option A (the old way): "Can you open Chrome DevTools, go to the Network tab, check 'Preserve log', reproduce the login, scroll through hundreds of requests, find the one with 'SAMLResponse' in the form data, click on it, go to Payload, copy the SAMLResponse value — it's the really long one — then paste it into a base64 decoder online, and send me the output?"

(The user has already stopped reading at "Chrome DevTools.")

Option B: You ask them to install a SAML tracing extension, reproduce the login, and click Export.

The difference between Option A and Option B is the difference between a 45-minute Zoom session where you're performing live tech support on your own tech support request, and a 2-minute self-service flow where the user captures exactly what you need and sends it over. The data you get from Option B is also more complete — you get the full decoded assertion, all headers, all parameters, and a clean timeline of the SSO flow.

SAML Tracing Tools: What They Are and Why They Matter

A SAML tracer is a browser extension that monitors your browser's network traffic for SAML messages. When it detects a SAMLRequest or SAMLResponse flying through, it captures it, decodes it from base64, uncompresses it if necessary, parses the XML, and presents the whole thing in a readable format. No manual base64 decoding. No squinting at minified XML. No copy-pasting between tools.

The original standard was the Firefox SAML-tracer extension — useful, battle-tested, and now effectively abandoned. It's Manifest V2, doesn't work in Chrome, and the last meaningful update was years ago.

Awesome SAML Tracer is its modern replacement — built for Chrome, Manifest V3, and designed to serve two audiences simultaneously:

It also imports the original SAML-tracer JSON format, so if your users or vendors are already exporting captures, Awesome SAML Tracer can open them directly.

A Real SAML Debugging Workflow

Here's what a modern SSO debugging session looks like with the right tooling in place:

  1. Install Awesome SAML Tracer from the Chrome Web Store and pin it to your toolbar.
  2. Click the extension icon to open the panel, then navigate to the SSO login page.
  3. Trigger the authentication flow — log in as the affected user, or ask the user to do it while the extension is open.
  4. The SAML tab populates in real time as the AuthnRequest and SAMLResponse fly through. Select the SAMLResponse entry to see the fully decoded assertion: Issuer, Subject, Conditions, AttributeStatement, Status.
  5. Check the Conditions timestamps if you suspect clock skew.
  6. Check the AttributeStatement if the user authenticated but has the wrong permissions or is missing from a group.
  7. Switch to the Errors view to see any 4xx/5xx responses in the flow — useful for spotting upstream failures before the SAML exchange even happens.
  8. Click Report to generate a self-contained HTML file. It opens in any browser, needs no internet connection, and contains everything an SP vendor's support team will ask for.

The whole diagnostic cycle — from "SSO is broken" to "here is the exact attribute that is missing and why" — takes under five minutes when both sides have the tooling.

Tip for IAM teams: Put the Chrome Web Store link and a one-paragraph install guide in your internal IT knowledge base. The next time a user files a "SSO is broken" ticket, you can reply with a link instead of scheduling a screen-share.

SAML SSO Debugging Checklist

When you're staring at a broken SSO flow and need to work through it systematically:

In Summary: It's Almost Always the IdP

SAML SSO debugging feels arcane at first because the errors are generic, the data is encoded, and the problem often lives in a system you don't control. But once you understand the flow — AuthnRequest out, SAMLResponse in, assertion validated — it mostly reduces to "which condition does this specific assertion violate and why."

The real bottleneck isn't understanding the protocol. It's getting the data. A SAML tracer removes that bottleneck by making it trivially easy for end users to capture exactly what an IAM engineer needs, and trivially easy for engineers to analyse it.

The next time a "SSO is broken" message lands in your Slack, you'll know exactly what to do. And when you've followed the checklist and the problem turns out to be a misconfigured attribute mapping on the IdP side — well. It's always the IdP.

Debug your next SSO issue in minutes

Awesome SAML Tracer is free, private, and works entirely in your browser — nothing leaves your device.

Add to Chrome — it's free