Skip to content

Authentication Methods

VeraID supports multiple authentication methods that can be enabled, disabled, and configured per organization. Users can enroll in multiple methods and use any enabled method to sign in. Conditional access policies can require specific methods for high-risk scenarios.

Overview

MethodTypeMFA SupportPhishing Resistant
Password + TOTPKnowledge + PossessionBuilt-in (TOTP is the second factor)No
Passkeys / WebAuthnPossession + BiometricBuilt-in (single gesture)Yes
Magic LinksPossession (email)Optional (can require TOTP after click)No
Social LoginDelegatedDepends on providerDepends on provider

Password + TOTP MFA

The classic username and password flow with time-based one-time password (TOTP) as a second factor.

Password policy

Configure password requirements for your organization:

Terminal window
curl -X PUT https://app.veraid.io/api/v1/auth/password-policy \
-H "Authorization: Bearer kd_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"minLength": 12,
"requireUppercase": true,
"requireLowercase": true,
"requireNumbers": true,
"requireSpecialChars": true,
"maxAgeDays": 90,
"historyCount": 12,
"lockoutThreshold": 5,
"lockoutDurationMinutes": 30,
"breachDetection": true
}'
SettingDefaultDescription
minLength12Minimum password length
requireUppercasetrueRequire at least one uppercase letter
requireLowercasetrueRequire at least one lowercase letter
requireNumberstrueRequire at least one digit
requireSpecialCharstrueRequire at least one special character
maxAgeDays90Days before password expires (0 = never)
historyCount12Number of previous passwords to block from reuse
lockoutThreshold5Failed attempts before account lockout
lockoutDurationMinutes30Lockout duration (0 = until admin unlock)
breachDetectiontrueCheck passwords against known breach databases (Have I Been Pwned)

TOTP enrollment

When TOTP is required, users are prompted to enroll during their next login:

  1. User completes password authentication.
  2. VeraID displays a QR code containing the TOTP secret.
  3. User scans the QR code with an authenticator app (Google Authenticator, Authy, 1Password, etc.).
  4. User enters the current 6-digit code to verify enrollment.
  5. VeraID provides recovery codes (8 single-use codes) for account recovery.

TOTP configuration

Terminal window
curl -X PUT https://app.veraid.io/api/v1/auth/totp-config \
-H "Authorization: Bearer kd_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"required": true,
"algorithm": "SHA1",
"digits": 6,
"period": 30,
"window": 1,
"recoveryCodesCount": 8
}'
SettingDefaultDescription
requiredfalseRequire TOTP for all users (grace period: 7 days after enabling)
algorithmSHA1HMAC algorithm (SHA1, SHA256, SHA512)
digits6Number of digits in the OTP code
period30Code validity period in seconds
window1Number of periods to accept before/after current time
recoveryCodesCount8Number of one-time recovery codes to generate

Passkeys / WebAuthn

Passkeys provide phishing-resistant authentication using platform authenticators (Touch ID, Face ID, Windows Hello) or security keys (YubiKey, Titan). A single biometric gesture replaces both the password and the second factor.

Enabling passkeys

Terminal window
curl -X PUT https://app.veraid.io/api/v1/auth/webauthn-config \
-H "Authorization: Bearer kd_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"enabled": true,
"rpName": "VeraID",
"rpId": "app.veraid.io",
"attestation": "none",
"userVerification": "required",
"residentKey": "preferred",
"allowedAuthenticators": ["platform", "cross-platform"]
}'
SettingDefaultDescription
enabledfalseEnable passkey registration and authentication
rpName”VeraID”Relying party display name shown to users
rpId”app.veraid.io”Relying party ID (must match the domain)
attestation”none”Attestation preference: none, indirect, direct
userVerification”required”User verification: required, preferred, discouraged
residentKey”preferred”Resident key requirement: required, preferred, discouraged
allowedAuthenticatorsBothplatform (Touch ID, Windows Hello), cross-platform (YubiKey)

Passkey enrollment

Users can register passkeys from Profile > Security > Passkeys:

  1. Click Register Passkey.
  2. The browser prompts for biometric verification or security key insertion.
  3. Name the passkey (e.g., “MacBook Pro Touch ID”, “Office YubiKey”).
  4. The passkey is registered and can be used for future sign-ins.

Users can register multiple passkeys for redundancy. Each passkey is listed with its name, creation date, and last-used timestamp.


Magic link authentication sends a one-time sign-in link to the user’s verified email address. No password is required.

Configuration

Terminal window
curl -X PUT https://app.veraid.io/api/v1/auth/magic-link-config \
-H "Authorization: Bearer kd_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"enabled": true,
"ttlMinutes": 10,
"maxAttempts": 3,
"requireMfaAfterClick": false,
"allowedDomains": ["example.com", "company.com"],
"emailTemplate": "default"
}'
SettingDefaultDescription
enabledfalseEnable magic link sign-in
ttlMinutes10Link validity period
maxAttempts3Maximum magic link requests per hour per email
requireMfaAfterClickfalseRequire TOTP verification after clicking the magic link
allowedDomainsAll verified domainsRestrict magic links to specific email domains
emailTemplate”default”Email template ID for the magic link message

Flow

  1. User enters their email address on the sign-in page.
  2. VeraID sends a one-time link to the email address.
  3. User clicks the link within the TTL window.
  4. VeraID validates the token and creates a session.
  5. (Optional) If requireMfaAfterClick is enabled, user must enter a TOTP code.

Social login

VeraID supports delegated authentication via external social and enterprise identity providers. Users can sign in using their existing accounts without creating a VeraID-specific password.

Supported providers

ProviderProtocolScopes Requested
GoogleOIDCopenid, email, profile
MicrosoftOIDCopenid, email, profile, User.Read
GitHubOAuth 2.0read:user, user:email
AppleOIDCname, email

Configuring a social provider

  1. Navigate to Settings > Identity Provider > Social Login.
  2. Click Add Provider and select the provider.
  3. Enter the OAuth/OIDC credentials from the provider’s developer console:
Terminal window
curl -X POST https://app.veraid.io/api/v1/auth/social-providers \
-H "Authorization: Bearer kd_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"provider": "google",
"clientId": "123456789.apps.googleusercontent.com",
"clientSecret": "GOCSPX-abc123...",
"scopes": ["openid", "email", "profile"],
"domainRestriction": ["example.com"],
"autoLinkByEmail": true,
"jitProvisioning": true
}'
SettingDescription
providerProvider identifier: google, microsoft, github, apple
clientIdOAuth client ID from the provider’s developer console
clientSecretOAuth client secret (encrypted at rest)
scopesOAuth scopes to request during authentication
domainRestrictionOnly allow users with email addresses from these domains
autoLinkByEmailAutomatically link social accounts to existing users by matching email
jitProvisioningCreate a VeraID user on first social login if one does not exist

Domain restrictions

Use domainRestriction to limit social login to users with email addresses from your organization’s verified domains. This prevents unauthorized users from signing in with personal accounts:

{
"domainRestriction": ["example.com", "subsidiary.example.com"]
}

Authentication method priority

When multiple methods are enabled, the sign-in page displays them in the following order:

  1. Passkeys — Shown first when the user has registered passkeys (browser autofill).
  2. Social login — Provider buttons displayed prominently.
  3. Magic link — “Sign in with email” option.
  4. Password — Traditional email/password form.

You can customize this order in Settings > Identity Provider > Sign-in Experience.


Enforcing specific methods

Use conditional access policies to require specific authentication methods based on context:

{
"name": "Require passkey for admin access",
"conditions": {
"roles": ["admin", "super-admin"],
"applications": ["admin-dashboard"]
},
"requirements": {
"authenticationMethods": ["webauthn"],
"maxSessionAge": "1h"
}
}

See Conditional Access for details on creating policies.


Next steps

OIDC Provider

Use VeraID as an OIDC identity provider for your applications. OIDC Guide

User Directory

Manage users, groups, and SCIM provisioning. Directory Guide

Conditional Access

Create context-aware policies that enforce specific authentication methods. Conditional Access