AuthnRequest
Send an unsigned SAML 2.0 AuthnRequest. This example omits correlation input, so a registration without correlation Attribute mappings returns its default transient NameID.Optional correlation input
An exact SP registration may acceptlogin_hint as an alternative to XML Subject. This is a
bilateral compatibility extension carried beside SAML, not a field inside the AuthnRequest. For
HTTP-Redirect, send it once in the query beside SAMLRequest and optional RelayState:
SAMLRequest, RelayState, or login_hint fields return HTTP 400 invalid_request, even
when their values agree. Encode a literal plus as %2B; otherwise URL or form decoding turns +
into a space.
FaceSign trims and validates Subject NameID and login_hint identically. An empty or whitespace-only
hint is absent. If both inputs are present, the trimmed values must agree; FaceSign then uses the Subject
and preserves its supported format. Different values return invalid_request. A mapped SP with
neither input returns subject_required before verification starts.
The extension is disabled by default. It requires a separate exact-SP opt-in in addition to the
unsigned correlation-echo policy. A nonempty hint without both permissions returns
subject_echo_disabled.
Success response
A successful response contains one Assertion. FaceSign signs the root Response and nested Assertion separately. This sample is abridged.Denial response
A completed non-pass or analysis failure may return a signed denial. It has no Assertion, NameID, or attributes. Only the root Response is signed.Success response as a failed sign-in.
Released attributes
The table below is the fixed success-attribute contract. Separately configured correlation Attributes are conditional and are described after the table.
By default, success uses a transient
facesign-session:<sessionId> NameID. An approved isolated
sandbox may instead echo an effective identifier from AuthnRequest Subject or a separately enabled
login_hint. For one exact SP, a mapping may duplicate that same value into one or two configured
correlation Attributes on success. The mechanism remains inactive until the exact per-SP list of
Attribute Name and NameFormat behaviors is configured; omitted NameFormat must be an explicitly
agreed behavior. A mapped SP requires one approved effective identifier before verification starts.
The echoed NameID and optional Attributes are caller-supplied correlation data, not FaceSign proof
of workforce identity.
Every configured correlation Attribute contains the same value as NameID. Its Attribute
NameFormat remains the exact registered behavior. A denial contains none of these fields.
The FaceSign-owned live loopback uses the reserved
.invalid synthetic Subject
loopback.user@example.invalid with NameID Format
urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress and proves the following two Attributes in
FaceSign’s durable default correlation profile, both
with SAML Attribute NameFormat
urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified:
This is an exact-SP loopback fixture, not a default attribute release or evidence that an external
SP accepts these fields. FaceSign must separately register an external SP’s exact one-or-two-item
mapping before those conditional Attributes can appear there.
Signature profile
The deployed build emits RSA-SHA256 signatures, SHA-256 digests, and exclusive XML canonicalization. On success, it signs the root Response and nested Assertion separately. On denial, it signs only the root Response; there is no Assertion. Trust the current X.509 certificate from the live metadata. Do not pin a certificate copied from an example or sample response. Incoming AuthnRequests remain unsigned.Validation checklist
1
Read Status first
Continue only when the top-level status is
Success. Treat any non-Success response as a
failed sign-in, and reject a non-success response that contains an Assertion.2
Validate the required signatures
On success, validate the root Response signature and nested Assertion signature against the
certificate in FaceSign metadata. On denial, validate the root Response signature.
3
Correlate the request
Match
InResponseTo on the Response and bearer confirmation data to an outstanding request.4
Check where and when it applies
Validate
Destination, Recipient, Audience, NotBefore, and both NotOnOrAfter values.
Apply the receiving SP’s documented clock-skew policy.5
Reject duplicates durably
Store accepted Response and Assertion IDs in a durable duplicate store and reject reuse.
6
Validate RelayState separately
Use RelayState only to resume application state. It is not identity or authentication evidence.
Replay and fallback responsibilities
InResponseTo provides correlation, but it does not prevent replay by itself. FaceSign reserves
each accepted AuthnRequest ID for its exact SP for 10 minutes. The receiving SP still must consume
each outstanding request once and durably reject duplicate Response and Assertion IDs.
A signed Responder/AuthnFailed is an authenticated non-success. A pre-flow HTTP error and an
unreachable or late flow may produce no usable SAML response. The integrator owns fallback for
each case. None may be converted to Success or treated as a valid step-up.