Authentication UX
Password, magic-link, OTP, passkey, social, and enterprise sign-in flows with explicit recovery and step-up ceremonies.
Portable IAM · CIAM · Explicit assurance
Shared Auth centralizes sign-in, token exchange, protected introspection, MFA, passkeys, enterprise federation, directories, and lifecycle management while keeping product authorization in the applications that own it.
Holistic identity infrastructure
The target is full IAM and CIAM coverage without collapsing identity, tenant membership, operator privilege, and application authorization into one opaque session.
Password, magic-link, OTP, passkey, social, and enterprise sign-in flows with explicit recovery and step-up ceremonies.
TOTP, email, SMS, passkeys, recovery codes, factor enrollment, challenge policy, and assurance-level evidence.
Organization switchers, invitations, verified domains, memberships, roles, and explicit application-owned authorization boundaries.
OIDC and SAML SSO, identity brokering, just-in-time enrollment, SCIM provisioning, and directory synchronization.
Session inventory, device context, bounded risk signals, revocation, concurrent-session policy, and reauthentication controls.
Identity linking, profile changes, recovery, suspension, deprovisioning, retention policy, and auditable account deletion.
Typed SDKs, machine identities, webhooks, API credentials, test tenants, event delivery, and generated identity contracts.
Policy versions, audit trails, operator separation, tenant support tooling, health evidence, and privacy-safe telemetry.
Cloudflare exact-host routing over independent Cloud Run and Kubernetes origins with readiness-gated, safe failover.
Product parity program
Clerk, Supabase Auth, Neon Auth, Okta/Auth0, WorkOS, Stytch, Frontegg, Entra ID, Ping, OneLogin, Keycloak, Ory, Logto, and SuperTokens are reference points—not compatibility claims. Features graduate only with typed backend contracts, authorization checks, audit evidence, and failure-state UX.
Profile, linked identities, passkeys, MFA, recovery, sessions, devices, consent, notifications, and account lifecycle.
User login →ORGANIZATION CONSOLEOrganization switching, invitations, members, roles, verified domains, SSO, SCIM, directories, audit events, and policy.
Organization login →ADMIN CONSOLETenant lifecycle, provider configuration, risk and session controls, incidents, system health, support access, and evidence exports.
Open administration →Official client packages
The official clients cover exchange, authenticated introspection, verification, JWKS, factors, OTP, and passkeys. These examples demonstrate the deliberate separation between service and end-user credentials.
let auth = SharedAuthClient::new(
"https://gateway.example/shared-auth",
).with_service_credential(
std::env::var("SHARED_AUTH_INTROSPECT_SECRET")?,
);
let identity = auth.introspect(access_token).await?;
if !identity.has_acr("urn:oresoftware:loa:2") {
anyhow::bail!("step-up authentication required");
}The service credential is sent only to /auth/introspect, never to exchange or factor requests.
const auth = new SharedAuthClient(
"https://gateway.example/shared-auth",
).withServiceCredential(
process.env.SHARED_AUTH_INTROSPECT_SECRET,
);
const identity = await auth.introspect(accessToken);
if (!identity.acr.includes("urn:oresoftware:loa:2")) {
throw new Error("step-up authentication required");
}TypeScript follows the same two-credential boundary and fails closed for sensitive operations.
final auth = SharedAuthClient(
'https://gateway.example/shared-auth',
).withServiceCredential(introspectionSecret);
final identity = await auth.introspect(accessToken);
if (!identity.hasAcr('urn:oresoftware:loa:2')) {
throw StateError('step-up authentication required');
}The Dart package carries factor and passkey operations for mobile and web hosts.
let auth = try SharedAuthClient(
baseURL: "https://gateway.example/shared-auth",
serviceCredential: ProcessInfo.processInfo.environment[
"SHARED_AUTH_INTROSPECT_SECRET"
]
)
let identity = try await auth.introspect(accessToken)
guard identity.hasACR("urn:oresoftware:loa:2") else {
throw AssuranceError.stepUpRequired
}Swift models WebAuthn credentials as opaque JSON so platform authenticators remain the biometric boundary.
Separate lanes
Shared Auth proves identity and assurance. Applications still own tenant, role, entitlement, and resource authorization.
Choose the intended boundary
The public header and mobile surface lead to distinct user and organization applications; neither path silently grants the other context.