Skip to main content
The examples use synthetic service-provider values and omit most XML Signature detail. Use live metadata and actual wire messages for integration testing.

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.
See Configure for binding, size, timing, correlation-input, and requested-context rules.

Optional correlation input

An exact SP registration may accept login_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:
For HTTP-POST, send the same named fields in the form body. A hint on the POST URL is rejected. Duplicate 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.
Treat any non-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.