Skip to main content
FaceSign needs two service-provider values before it can accept an AuthnRequest:
  • The exact, case-sensitive SP entityID.
  • The exact HTTPS Assertion Consumer Service (ACS) URL that accepts HTTP-POST responses.
Pilot registration is partner-assisted. FaceSign confirms through your pilot onboarding channel when the exact, case-sensitive entityID and HTTPS POST ACS URL are active. Use an isolated, non-authorizing sandbox for UAT, with synthetic identifiers wherever an identifier is needed.

Open FaceSign IdP metadata

Import the live entityID, signing certificate, SSO bindings, and transient NameID format. Live metadata is authoritative for the current signing certificate.

Configuration at a glance

FaceSign registers the entityID and HTTPS ACS exactly as supplied. If the request includes AssertionConsumerServiceURL, it must match that ACS. The metadata publishes Redirect and POST SSO endpoints, but responses always use HTTP-POST. For certificate rollover, notification timing and metadata re-import behavior must be agreed during onboarding or UAT.

Supported AuthnRequest profile

The deployed IdP accepts HTTP-Redirect and HTTP-POST requests with these rules: The replay reservation is scoped to the exact SP entityID and request ID. It is an inbound guard. The receiving SP still owns durable Response and Assertion replay rejection. Duplicate SAMLRequest, RelayState, or login_hint fields return HTTP 400 invalid_request, even when the repeated values agree. FaceSign never accepts login_hint from a POST URL or combines it with a form hint. The IdP rejects signed AuthnRequests. That includes an embedded XML signature and Redirect or POST signature parameters. If the service provider cannot disable request signing, it is incompatible with the deployed profile.

NameID and correlation input

For a registration without correlation Attribute mappings, a request with no approved correlation input returns a transient, session-scoped NameID. Omit NameIDPolicy, or request transient or unspecified. With approved sandbox correlation echo, the effective identifier can come from either an XML Subject NameID or, when separately enabled for that exact SP, login_hint. FaceSign trims surrounding whitespace, preserves case, and applies the same validation to both sources: the value must be nonempty after trimming, contain no control, invisible, or nonstandard whitespace characters, and contain no more than 256 UTF-16 code units. FaceSign does not Unicode-normalize or decode the value a second time. For Subject input, use an advertised email, persistent, Windows-domain, Kerberos, or unspecified format, or omit Format. Transient is not accepted. The returned NameID format is the Subject format, or SAML 1.1 unspecified when the Subject omits it. For hint-only input, a supported concrete NameIDPolicy format selects the returned NameID format. An omitted or unspecified policy returns canonical SAML 1.1 unspecified. If both inputs are present, their trimmed values must agree; FaceSign then preserves the Subject value and format. A disagreement returns HTTP 400 invalid_request. NameIDPolicy may be omitted, request unspecified, or exactly match a supported returned NameID format. Transient and unknown formats remain invalid for caller-supplied correlation input. SPNameQualifier on NameIDPolicy is not supported. For one exact registered sandbox SP, FaceSign can separately configure a bounded list of one or two correlation Attributes. Each mapping records an exact Attribute Name and exact NameFormat behavior: SAML’s standard uri, basic, or unspecified NameFormat URI, or an explicit agreement to omit NameFormat. Names must be unique. Under the uri NameFormat, the Attribute Name must itself be an absolute URI. On a successful assertion with an effective identifier, every configured Attribute repeats the same value as the returned NameID. The mechanism remains inactive until that exact per-SP list is configured. Once it is configured, a request with neither Subject nor an approved nonempty login_hint is rejected before a FaceSign session starts. The FaceSign-owned live loopback is already configured with the reserved .invalid synthetic Subject loopback.user@example.invalid, NameID Format urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress, and the following two Attributes in FaceSign’s durable default correlation profile, both using SAML Attribute NameFormat urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified:
  • http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
  • http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
Its ACS validates the exact NameID and both fields. That proves FaceSign’s loopback contract only; it does not enable either Attribute for an external SP.
The echoed NameID and any configured correlation Attributes contain the same unsigned, caller-supplied request input. None is FaceSign identity proof, and none can authorize access.
FaceSign enables unsigned correlation echo separately for each registered SP, and it remains off by default. The non-SAML login_hint compatibility extension requires its own exact-SP opt-in in addition to the echo policy. A nonempty Subject or hint without the applicable opt-in returns subject_echo_disabled. An empty or whitespace-only hint counts as absent. Before enabling echo, agree on a synthetic value such as test.user@example.invalid, the accepted input source, and the expected returned NameID. If the SP reads response Attributes, also agree on the exact one-or-two-item list of Attribute Name and NameFormat behaviors. Omit NameFormat only by explicit agreement. FaceSign emits no correlation Attributes until that exact per-SP list is configured. Never place a real workforce identifier in a public fixture.

Synthetic HTTP-Redirect example

This template shows where the hint belongs:
The following dependency-free Node.js example prints a complete Redirect URL with a fresh request ID and IssueInstant. Its SP and ACS are deliberately synthetic and unregistered. Replace them only after FaceSign confirms your exact registration.
For HTTP-POST, place SAMLRequest, optional RelayState, and optional login_hint in the form body. Do not put login_hint on the POST URL. URL and form decoding treat + as a space, so encode a literal plus sign as %2B (for example, test%2Buat%40example.invalid). URLSearchParams performs that encoding in the example above.

RequestedAuthnContext

Omit RequestedAuthnContext, or send exactly one container with Comparison="exact" and exactly one class reference:
FaceSign returns that fixed class. Any other requested authentication context is rejected before verification starts. Confirm that the receiving SP accepts this exact value during UAT.

Unsupported features

  • Signed AuthnRequests.
  • AssertionConsumerServiceIndex.
  • IdP-initiated SSO.
  • SLO and SingleLogoutService.
  • HTTP-Artifact and artifact resolution.
  • Encrypted Assertions, encrypted NameIDs, and EncryptedID.
  • Interactive requests with IsPassive="true" or IsPassive="1".
  • SPNameQualifier on NameIDPolicy.
  • Any RequestedAuthnContext other than the exact fixed class described above.
Next, compare your messages with the SAML examples and validation checklist.