WW Tools
All references

SAML Status Codes Reference

A SAML response carries a Status with a top-level StatusCode (Success, Requester, Responder or VersionMismatch) and often a nested second-level code that gives the actual reason. The top-level code says which side the problem is on; the second-level code says what went wrong. The same table drives the SAML decoder's verdict panel, so a code you see there has a row here.

Status codes

Status codeLevelMeaningUsuallyWhat to check
SuccessTop-levelThe request succeeded.NoneNothing to fix in the status. If sign-in still fails, the problem is in the other checks: time windows, audience, destination, or the signature.
RequesterTop-levelThe request could not be performed because of an error on the requester's side.Requester's sideRead the second-level code and the StatusMessage, then check the request the requester sent: its Issuer, its ACS URL or index, and its NameIDPolicy.
ResponderTop-levelThe request could not be performed because of an error on the responder's side.Responder's sideRead the second-level code and the StatusMessage, then check the responder's logs and its configuration for this application.
VersionMismatchTop-levelThe responder could not process the request because of the SAML version it used.Requester's sideMake sure both sides speak SAML 2.0 and that the request's Version attribute is "2.0".
AuthnFailedSecond-levelThe responder could not authenticate the principal (the user).The userCheck the user's sign-in at the IdP: wrong password, a locked or disabled account, or a failed MFA step. The IdP sign-in log names the reason.
InvalidAttrNameOrValueSecond-levelAn attribute name or value in the request was not understood or not allowed.Requester's sideCheck the attribute names and values in the request (for example in an AttributeQuery) against what the responder supports.
InvalidNameIDPolicySecond-levelThe responder cannot or will not support the requested NameID policy.Requester's sideThe AuthnRequest asked for a NameID format the IdP will not release. Make the NameIDPolicy Format in the SP's request match the NameID format configured for this app at the IdP, or request the unspecified format.
NoAuthnContextSecond-levelThe responder cannot authenticate the user in the way the request's authentication context requires.Requester's sideThe request's RequestedAuthnContext (for example PasswordProtectedTransport with Comparison exact) does not match how the user signed in (for example Windows integrated or MFA). Use Comparison minimum, or remove RequestedAuthnContext.
NoAvailableIDPSecond-levelA proxying responder could not find a supported identity provider that is available.Responder's sideCheck the proxy's list of upstream identity providers and whether any of them is reachable and enabled.
NoPassiveSecond-levelThe responder could not sign the user in passively, without interacting with them.The userThe SP sent IsPassive=true and the user has no session at the IdP, so it could not sign them in without showing a login page.
NoSupportedIDPSecond-levelA proxying responder supports none of the identity providers the request listed.Responder's sideCompare the IDPList in the request's Scoping element with the identity providers the proxy knows.
PartialLogoutSecond-levelLogout finished for this session, but not every session participant confirmed it.Either sideSome other application may still hold a session. Check which session participants did not answer the logout.
ProxyCountExceededSecond-levelThe responder would have to proxy the request further, but the request's proxy limit does not allow it.Requester's sideRaise or remove ProxyCount in the request's Scoping element, or have the user sign in at the first responder directly.
RequestDeniedSecond-levelThe responder understood the request and chose not to answer it.Responder's sideFor a sign-in, the most common cause is that the user is not assigned to this application at the IdP. Check the user and group assignments, then the IdP sign-in log.
RequestUnsupportedSecond-levelThe responder does not support this request.Requester's sideCheck that the responder supports this kind of message and binding, for example Single Logout or a passive request.
RequestVersionDeprecatedSecond-levelThe responder no longer accepts the protocol version of the request.Requester's sideSend the request as SAML 2.0.
RequestVersionTooHighSecond-levelThe request's protocol version is newer than the responder supports.Requester's sideSend the request with Version="2.0".
RequestVersionTooLowSecond-levelThe request's protocol version is older than the responder supports.Requester's sideSend the request with Version="2.0".
ResourceNotRecognizedSecond-levelThe responder does not recognize the resource the request names.Requester's sideCheck the resource or entity named in the request against what the responder has configured.
TooManyResponsesSecond-levelThe response would contain more elements than the responder can return.Responder's sideNarrow the request, for example ask for fewer attributes or a single assertion.
UnknownAttrProfileSecond-levelThe responder does not support the attribute profile the request uses.Requester's sideUse an attribute profile the responder supports, or leave the profile out of the request.
UnknownPrincipalSecond-levelThe responder does not know the principal the request names.Requester's sideCheck the NameID or subject in the request: the user may not exist on the responder, or the NameID format or value differs.
UnsupportedBindingSecond-levelThe responder cannot send the response over the binding the request asked for.Requester's sideCheck ProtocolBinding in the request and the bindings the responder supports, for example HTTP-POST for the response.

Every code is a URN: urn:oasis:names:tc:SAML:2.0:status: followed by the name in the first column, for example urn:oasis:names:tc:SAML:2.0:status:Responder. Meanings paraphrase SAML Core section 3.2.2.2.

Why an SP rejects a valid-looking response

Error you seeElementWhat to compare
Audience invalidConditions / AudienceRestriction / AudienceThe Audience against the SP entity ID, character for character (a trailing slash or letter case is enough to fail).
Recipient mismatchSubjectConfirmationData RecipientThe Recipient against the ACS URL the SP received the response on.
Destination mismatchResponse DestinationThe Destination against the ACS URL, including scheme, host, port and path.
Assertion expired / NotOnOrAfterConditions NotOnOrAfter and SubjectConfirmationData NotOnOrAfterBoth times against the SP clock and its allowed skew. A slow browser hop or a drifting server clock is the usual cause.
Assertion not yet validConditions NotBeforeNotBefore against the SP clock. The usual cause is an IdP clock running ahead of the SP clock by more than the allowed skew.
InResponseTo mismatchResponse InResponseTo and SubjectConfirmationData InResponseToInResponseTo against the ID of the AuthnRequest the SP sent. An IdP-initiated (unsolicited) response has no InResponseTo, which some SPs refuse.
Signature validation failedds:Signature and its KeyInfo certificateThe signing certificate in the SP configuration against the one in current IdP metadata (rotation is the usual cause), and which element the signature covers (Response or Assertion) against what the SP requires.
Invalid NameID formatAuthnRequest NameIDPolicy and the assertion NameID FormatThe NameID format the SP requests against the one the IdP is configured to release for this application.

A response can decode cleanly and carry Success yet still be rejected, because these checks run after decoding.

Frequently asked questions

What is the difference between Requester and Responder?

They are the two top-level failure codes. Requester means the request itself was at fault (a bad NameIDPolicy, an unknown ACS URL, an unsupported binding), so the fix is on the side that sent it. Responder means the side answering could not or would not complete it, so the fix is in its configuration or its logs. Either way, read the second-level code: it carries the actual reason.

Why do I get Responder with RequestDenied?

RequestDenied means the responder understood the request and chose not to answer it. For a sign-in, the most common cause is that the user is not assigned to the application at the IdP. Check the user and group assignments for the application, then the IdP sign-in log, which names the policy that denied it.

Where do I see the status code?

In the Status element of the SAML response: StatusCode Value holds the top-level code, a nested StatusCode holds the second-level code, and StatusMessage may add text. Paste the SAMLResponse into the SAML decoder and the verdict panel shows the whole chain with an explanation of each code.

Use the tool