Prerequisites
Before you start, make sure you have:- A Prelude account with access to Prelude Auth
- An Application ID (
appID) — see Applications - Your Management API key for backend calls
- OAuth credentials from the provider you want to configure (client ID, client secret, etc.)
Supported providers
Configuration options
All providers share the following options:
Some providers require additional configuration — see the provider-specific guides below.
Email verification trust model
use_email_as_identifier and allow_email_account_merge both depend on whether the provider vouches that the email belongs to the signed-in user. Prelude Auth uses provider-specific signals:
When a provider surfaces an email as unverified, Prelude Auth will not store it as an identifier and will not auto-merge it into an existing account. If
allow_email_account_merge is enabled and an unverified email collides with an existing Auth user, the flow is rejected with an email_in_use error instead of silently linking the accounts.
Verify email via OTP
Enableverify_email on a provider when you want users to keep signing in even if the IdP returns the email as unverified. Instead of rejecting the flow or creating an unlinked account, Prelude Auth sends an email OTP to the address surfaced by the IdP and links the OAuth identifier only after the user proves ownership.
The flow:
- The user signs in with the OAuth provider.
- The IdP returns an email but does not vouch for it (e.g. Microsoft without
xms_edov, or a custom Okta tenant). - Prelude Auth redirects back to your app with
challenge_token=…&status=otp_requiredinstead of finalizing the login. - The Web SDK’s
finalizeOAuthLoginreturns{ status: "otp_required", challengeId, email }so your app can route to its OTP screen and callcheckOTPwith the code the user entered. - On a successful OTP, Prelude Auth attaches the OAuth identifier to (or creates) the user that owns the email and finalizes the login automatically.
use_email_as_identifiermust betrue. Verifying an email that will never be persisted as an identifier serves no purpose.- The application must have at least one email OTP login config. Removing the last email OTP login config while any provider still has
verify_email=trueis rejected.
verify_email is true but use_email_as_identifier is later flipped off, the OTP step is skipped at runtime and the account is created with only the OAuth identifier — the existing config keeps loading instead of breaking, but the OAuth-link flow is effectively disabled until both flags are aligned.
When the email already belongs to another account and allow_email_account_merge is false, Prelude Auth rejects with email_in_use before sending the OTP so the user does not get sent through a screen for a flow that would dead-end.
Provider guides
Configure Google OAuth for your application.
Apple
Configure Apple OAuth for your application.
Microsoft
Configure Microsoft OAuth for your application.
GitHub
Configure GitHub OAuth for your application.
Okta
Configure Okta OAuth for your application.
Configure Facebook OAuth for your application.
Configure LinkedIn OAuth for your application.