OIDC Provider
Use VeraID as an OIDC identity provider for your applications. OIDC Guide
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.
| Method | Type | MFA Support | Phishing Resistant |
|---|---|---|---|
| Password + TOTP | Knowledge + Possession | Built-in (TOTP is the second factor) | No |
| Passkeys / WebAuthn | Possession + Biometric | Built-in (single gesture) | Yes |
| Magic Links | Possession (email) | Optional (can require TOTP after click) | No |
| Social Login | Delegated | Depends on provider | Depends on provider |
The classic username and password flow with time-based one-time password (TOTP) as a second factor.
Configure password requirements for your organization:
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 }'| Setting | Default | Description |
|---|---|---|
minLength | 12 | Minimum password length |
requireUppercase | true | Require at least one uppercase letter |
requireLowercase | true | Require at least one lowercase letter |
requireNumbers | true | Require at least one digit |
requireSpecialChars | true | Require at least one special character |
maxAgeDays | 90 | Days before password expires (0 = never) |
historyCount | 12 | Number of previous passwords to block from reuse |
lockoutThreshold | 5 | Failed attempts before account lockout |
lockoutDurationMinutes | 30 | Lockout duration (0 = until admin unlock) |
breachDetection | true | Check passwords against known breach databases (Have I Been Pwned) |
When TOTP is required, users are prompted to enroll during their next login:
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 }'| Setting | Default | Description |
|---|---|---|
required | false | Require TOTP for all users (grace period: 7 days after enabling) |
algorithm | SHA1 | HMAC algorithm (SHA1, SHA256, SHA512) |
digits | 6 | Number of digits in the OTP code |
period | 30 | Code validity period in seconds |
window | 1 | Number of periods to accept before/after current time |
recoveryCodesCount | 8 | Number of one-time recovery codes to generate |
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.
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"] }'| Setting | Default | Description |
|---|---|---|
enabled | false | Enable 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 |
allowedAuthenticators | Both | platform (Touch ID, Windows Hello), cross-platform (YubiKey) |
Users can register passkeys from Profile > Security > Passkeys:
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.
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" }'| Setting | Default | Description |
|---|---|---|
enabled | false | Enable magic link sign-in |
ttlMinutes | 10 | Link validity period |
maxAttempts | 3 | Maximum magic link requests per hour per email |
requireMfaAfterClick | false | Require TOTP verification after clicking the magic link |
allowedDomains | All verified domains | Restrict magic links to specific email domains |
emailTemplate | ”default” | Email template ID for the magic link message |
requireMfaAfterClick is enabled, user must enter a TOTP code.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.
| Provider | Protocol | Scopes Requested |
|---|---|---|
| OIDC | openid, email, profile | |
| Microsoft | OIDC | openid, email, profile, User.Read |
| GitHub | OAuth 2.0 | read:user, user:email |
| Apple | OIDC | name, email |
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 }'| Setting | Description |
|---|---|
provider | Provider identifier: google, microsoft, github, apple |
clientId | OAuth client ID from the provider’s developer console |
clientSecret | OAuth client secret (encrypted at rest) |
scopes | OAuth scopes to request during authentication |
domainRestriction | Only allow users with email addresses from these domains |
autoLinkByEmail | Automatically link social accounts to existing users by matching email |
jitProvisioning | Create a VeraID user on first social login if one does not exist |
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"]}When multiple methods are enabled, the sign-in page displays them in the following order:
You can customize this order in Settings > Identity Provider > Sign-in Experience.
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.
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