Which flow should I use?
Pick the right SenseCrypt integration — Authorization Code with PKCE, CIBA, client-credentials (M2M), or SAML — based on whether a human signs in, whether a browser is present, and what protocol your app speaks.
SenseCrypt supports a deliberately small, standards-based set of flows. Choosing between them comes down to three questions: is a human signing in, or is it a machine? — is a browser present at login? — and does your app speak OIDC or SAML? In every human flow, the biometric face proof happens on the user's own device (their phone in the Simple QR and passkey flows); the flow only decides how your app starts and finishes the exchange.
Decision tree
The rules, in words
- A machine or service calling the Management API — no human, no browser → client-credentials (M2M). You get an access token for a service account with scoped roles. See Machine-to-machine.
- A human, and your app is a SAML service provider — → SAML 2.0 SSO, with SenseCrypt acting as the SAML IdP. See SAML SSO.
- A human, OIDC, with a browser at sign-in (a web app, single-page app, or native app that can open a browser) → Authorization Code flow with PKCE. This is the common case. See Add Login (OIDC) or a framework quickstart.
- A human, OIDC, but no browser on the device initiating the sign-in (a kiosk, a CLI, a call-center agent verifying a caller) → CIBA, where the request is decoupled and the user approves on their own phone. See CIBA back-channel.
Whichever flow you pick, the actual sign-in — the on-device face proof — is identical and happens on the user's own device (their phone in the Simple QR and passkey flows). The flow only determines how your application initiates the request and receives the result. No biometric data ever leaves the device.
What SenseCrypt does not support
So you don't spend time looking for them: SenseCrypt intentionally does not implement the Resource Owner Password Credentials (password) grant, the OAuth Device Authorization grant, or Dynamic Client Registration. The Implicit (id_token, id_token token) and Hybrid (code id_token, code token, code id_token token) response types exist for relying parties that need them, but are off by default and must be enabled per application — Authorization Code + PKCE is the default and the recommended flow, the quickstarts use nothing else, and an application on the FAPI 2.0 profile is code-only (see OIDC & OAuth 2.0). response_type defaults to code, and code_challenge_method is S256 only. These omissions are deliberate — each is either superseded by Authorization Code + PKCE or incompatible with an on-device biometric model.
Four more absences worth knowing about, all deliberate:
- A
requestobject at/authorize. JAR request objects are accepted at the PAR endpoint and at the CIBA endpoint, never at the authorization endpoint (request_parameter_supported: false) — arequestthere is refusedrequest_not_supported, and arequest_urithat isn't one SenseCrypt minted is refusedrequest_uri_not_supported. - Encrypted tokens and responses. SenseCrypt signs; it does not offer JWE id_tokens, UserInfo responses or authorization responses, and advertises no
*_encryption_*metadata. - CIBA
user_code. There is no per-user secret on a passwordless issuer to verify one against, sobackchannel_user_code_parameter_supportedisfalseand registering the opt-in is refused. - SAML Single Logout (SLO). There is no SLO endpoint or
LogoutRequesthandling. For OIDC, use RP-initiated and back-channel logout instead.
Learn more
What is SenseCrypt?
SenseCrypt is a passwordless, biometric, multi-tenant identity provider (OIDC/OAuth 2.0, SAML 2.0, SCIM 2.0, and CIBA) where every sign-in is gated by a live face proof matched on the user's own device plus a hardware-bound passkey, and no face image or template ever reaches the service.
Add Login (OIDC)
Add biometric single sign-on to your web app with the OIDC Authorization Code flow and PKCE — discovery, redirect, code exchange, and id_token validation.