Skip to content
Version v3.0.3

Multi-factor authentication

A multi-factor authentication is an extra layer of security for ProAuth designed to ensure that you're the only person who can access your account, even if someone knows your password.

E-Mail

E-Mail MFA is a security verification procedure, which is triggered through a user logging into a website, software or application. In the log-in process, the user is automatically sent an E-Mail containing a unique numeric code. This 'token-code' is then inputted by the individual, verifying themselves as the user logging into the online account.

Create new MFA

Steps to create a new MFA instance:

  • Navigate to the ProAuth Admin UI and login with a user with in minimum is a SubscriptionAdmin
  • Navigate to MFA Instances and click on Create MFA Instance
  • Choose the MFA Type email
  • Enable the flag Active
  • Choose the proper Subscription
  • Click Save

Create Email MFA

Configure new MFA

After the creation of the MFA instance in the step before, it's now necessary to configure the MFA instance. Invalid MFA instances aren't available in ProAuth.

Steps to complete the configuration of the MFA instance:

  • Open the MFA instance in the extended edit view
  • Configure the mandatory service options (details below)
  • In order for the MFA instance to be applied, assign the MFA instance to the required Tenants, IDPs, Client Applications or ProAuth Users

Edit Email MFA

Configure mandatory Options, if they are not already provided by the ProAuth base service settings:

  • Set the EMailSenderAddress
  • Set the MailServerConfig

Edit Email Server settings

MailServerConfiguration sample data for SMTP Server:

json
{
    "MailType": "SMTP",
    "Host": "<smtp-host-address>",
    "Port": 465,
    "EnableSSL": true,
    "UserName": "<smtp-username>",
    "Password": "<smtp-password>",
    "Timeout": 20000
}

MailServerConfiguration sample data for Microsoft365:

json
{
    "MailType": "M365",
    "ClientId": "<aad-app-clientid>",
    "ClientSecret": "<aad-app-clientsecret>",
    "TenantId": "<aad-app-tenantid>",
    "UserId": "<aad-user-objectid>"
}

SMS

SMS MFA is a security verification procedure, which is triggered through a user logging into a website, software or application. In the log-in process, the user is automatically sent an SMS to their mobile number containing a unique numeric code. This 'token-code' is then inputted by the individual, verifying themselves as the user logging into the online account.

Create new MFA

Steps to create a new MFA instance:

  • Navigate to the ProAuth Admin UI and login with a user with in minimum is a SubscriptionAdmin
  • Navigate to MFA Instances and click on Create MFA Instance
  • Choose the MFA Type ecall
  • Enable the flag Active
  • Choose the proper Subscription
  • Click Save

Create eCall MFA

Configure new MFA

After the creation of the MFA instance in the step before, it's now necessary to configure the MFA instance. Invalid MFA instances aren't available in ProAuth.

Steps to complete the configuration of the MFA instance:

  • Open the MFA instance in the extended edit view
  • Configure the mandatory service options (details below)
  • In order for the MFA instance to be applied, assign the MFA instance to the required Tenants, IDPs, Client Applications or ProAuth Users

Edit eCall MFA

Configure mandatory Service Options:

  • Set the ECallAccountName
  • Set the ECallAccountPassword
  • Set the ECallAccountFromNumber

You can get the Service Option values from your eCall account.

Create new MFA

Steps to create a new MFA instance:

  • Navigate to the ProAuth Admin UI and login with a user with in minimum is a SubscriptionAdmin
  • Navigate to MFA Instances and click on Create MFA Instance
  • Choose the MFA Type email
  • Enable the flag Active
  • Choose the proper Subscription
  • Click Save

Create Twilio MFA

Configure new MFA

After the creation of the MFA instance in the step before, it's now necessary to configure the MFA instance. Invalid MFA instances aren't available in ProAuth.

Steps to complete the configuration of the MFA instance:

  • Open the MFA instance in the extended edit view
  • Configure the mandatory service options (details below)
  • In order for the MFA instance to be applied, assign the MFA instance to the required Tenants, IDPs, Client Applications or ProAuth Users

Edit Twilio MFA

Configure mandatory Service Options:

  • Set the TwilioAccountSid
  • Set the TwilioAuthToken
  • Set the TwilioSmsFromNumber

You can get the Service Option values from your Twilio account.

TOTP

TOTP stands for Time-based One-Time Passwords and is a common form of multi-factor authentication (MFA). Unique numeric passwords are generated with a standardized algorithm that uses the current time as an input. The time-based passwords are available offline and provide user friendly, increased account security when used as an MFA factor.

TOTP is also known as app based authentication, software tokens, or soft tokens. Authentication apps like Microsoft Authenticator and Google Authenticator support the TOTP standard.

Create new MFA

Steps to create a new MFA instance:

  • Navigate to the ProAuth Admin UI and login with a user with in minimum is a SubscriptionAdmin
  • Navigate to MFA Instances and click on Create MFA Instance
  • Choose the MFA Type Totp
  • Enable the flag Active
  • Choose the proper Subscription
  • Click Save

Create TOTP MFA

Configure new MFA

After the creation of the MFA instance in the step before, it's now necessary to configure the MFA instance. Invalid MFA instances aren't available in ProAuth.

Steps to complete the configuration of the MFA instance:

  • Open the MFA instance in the extended edit view
  • In order for the MFA instance to be applied, assign the MFA instance to the required Tenants, IDPs, Client Applications or ProAuth Users

Edit TOTP MFA

You can safely use the default values for Service Option values.

Passkeys (FIDO2 / WebAuthn)

Passkeys provide phishing-resistant MFA using the WebAuthn standard (FIDO2). Instead of entering a one-time code, the user authenticates with a hardware security key (e.g., YubiKey), a platform authenticator (e.g., Windows Hello, Touch ID, Face ID), or a passkey synced through a password manager.

When used as an MFA factor, passkeys operate with userVerification: "discouraged" — the first factor (password) already established identity, so the passkey only needs to prove possession of the credential (User Presence).

INFO

MFA passkeys are stored in the ProAuth database (in the ProAuthUserMfaFactor entity), separate from login passkeys which are stored in the User Store database. This allows MFA passkeys to work with both User Store and federated identity providers (e.g., Google, Entra ID).

TIP

The first MFA passkey is registered during the initial MFA challenge. Users can register additional passkeys and manage existing ones through the Account Management portal.

Create Passkey MFA Instance

Steps to create a new Passkey MFA instance:

  1. Navigate to the ProAuth Admin UI and log in with a user that has at minimum SubscriptionAdmin role
  2. Navigate to MFA Instances and click Create MFA Instance
  3. Choose the MFA Type Passkey
  4. Enable the Active flag
  5. Choose the proper Subscription
  6. Click Save

Configure Passkey MFA

After creating the MFA instance, complete the configuration:

  1. Open the MFA instance in the extended edit view
  2. Assign the MFA instance to the required Tenants, IDPs, Client Applications, or ProAuth Users

WARNING

The Passkey MFA module derives the WebAuthn RP ID from BaseServiceSettings:HostUrl. The PasskeyRpName option on the MFA instance controls the relying-party display name for clients that expose it.

How Passkey MFA Works

Differences from TOTP

FeatureTOTPPasskey
Phishing resistance❌ Codes can be phished✅ Bound to origin
User interactionEnter 6-digit codeTouch authenticator
Requires deviceAuthenticator appSecurity key or platform authenticator
Offline support✅ Works offline✅ Works offline
Code entryManualAutomatic

Brute Force Protection for MFA

ProAuth provides brute force protection for MFA verification. Two mechanisms are available: temporary locking and progressive throttling. These are configured per MFA instance and protect against automated attacks on the verification step.

INFO

MFA brute force protection is independent from UserStore brute force protection. They use separate counters and separate configuration. For first factor (password) protection, see UserStore Brute Force Protection.

Temporary Locking

When enabled, MFA verification is temporarily locked after a configurable number of consecutive failed attempts. While locked, all verification attempts are rejected. The lock is automatically lifted after the configured duration.

Configuration

OptionDescriptionDefault
MfaTemporaryLockEnabledEnable or disable temporary locking.false
MfaTemporaryLockThresholdFailed attempts before lock is applied.10
MfaTemporaryLockDurationSecondsLock duration in seconds.3600 (1 hour)

Progressive Throttling

Throttling introduces a progressively increasing delay before each verification response. The delay grows exponentially with consecutive failed attempts.

Configuration

OptionDescriptionDefault
MfaThrottlingEnabledEnable or disable progressive throttling.false
MfaThrottlingBaseDelayMsBase delay in milliseconds after first failed attempt.1000
MfaThrottlingMaxDelayMsMaximum delay cap in milliseconds.30000

Delay Formula

The delay is calculated using exponential backoff:

$$\text{delay} = \min!\bigl(\text{BaseDelayMs} \times 2^{(\text{failedAttempts} - 1)},; \text{MaxDelayMs}\bigr)$$

Best Practices

OptionRecommended Value
MfaThrottlingEnabledtrue
MfaThrottlingBaseDelayMs1000
MfaThrottlingMaxDelayMs30000
MfaTemporaryLockEnabledtrue
MfaTemporaryLockThreshold5 to 10
MfaTemporaryLockDurationSeconds300 to 900

TIP

Enable both throttling and temporary locking for defense in depth. Throttling provides gradual slowdown while temporary locking stops persistent attacks.

Code Resend Protection

ProAuth also limits how frequently verification codes can be resent to prevent flooding. This is configured via MfaMaxCodeResends and MfaCodeResendCooldownSeconds options per MFA instance.

Monitoring

ProAuth exposes OpenTelemetry metrics for MFA security events:

MetricDescription
mfa_temporary_lock_totalTemporary locks applied

Configure alerts for elevated lock rates to detect potential attacks or misconfigured thresholds.

Configuration via Management API

These settings can be managed in the Admin UI, through the Management API or the generated .NET management client packages, and as configuration as code through ProAuth CLI YAML imports.

If you automate through the Management API, options are configured per MFA instance through the standard option resource:

http
POST /api/management/v2/option
Content-Type: application/json

{
  "name": "MfaThrottlingEnabled",
  "value": "true",
  "applyToMfaInstanceId": "<mfa-instance-id>"
}
Option NameTypeExample Value
MfaTemporaryLockEnabledbooleantrue
MfaTemporaryLockThresholdinteger10
MfaTemporaryLockDurationSecondsinteger3600
MfaThrottlingEnabledbooleantrue
MfaThrottlingBaseDelayMsinteger1000
MfaThrottlingMaxDelayMsinteger30000

CAPTCHA Protection

In addition to throttling and locking, ProAuth supports CAPTCHA challenges for MFA verification. CAPTCHA adds an additional layer of protection against automated attacks on the MFA verification step.

Supported Providers

ProAuth integrates with three privacy-focused CAPTCHA providers. All providers are GDPR-compliant.

ProviderDescription
Cloudflare TurnstileFree, privacy-focused, invisible challenges. Default provider.
hCaptchaPrivacy-focused alternative to reCAPTCHA.
Friendly CaptchaEU-based, proof-of-work based, no cookies.

For detailed provider information and setup instructions, see UserStore CAPTCHA Protection.

Activation Modes

CAPTCHA for MFA verification supports three activation modes:

ModeDescription
DisabledCAPTCHA is never shown during MFA verification. Default.
AlwaysCAPTCHA is required on every verification attempt.
AfterFailuresCAPTCHA is required after consecutive failed verification attempts.

Configuration

CAPTCHA for MFA is configured per MFA instance. Register with your chosen CAPTCHA provider to obtain credentials.

OptionDescriptionDefault
MfaCaptchaActivationModeWhen CAPTCHA is required: Disabled, Always, or AfterFailures.Disabled
MfaCaptchaFailureThresholdFailed verification attempts before CAPTCHA is required (for AfterFailures mode).3
MfaCaptchaProviderProvider: Turnstile, HCaptcha, or FriendlyCaptcha.Turnstile
MfaCaptchaSiteKeyPublic site key from your CAPTCHA provider.
MfaCaptchaSecretKeySecret key for server-side verification.

Configuration via Management API

The same management options apply here: Admin UI, Management API or generated .NET management client packages, and ProAuth CLI YAML.

http
POST /api/management/v2/option
Content-Type: application/json

{
  "name": "MfaCaptchaActivationMode",
  "value": "AfterFailures",
  "applyToMfaInstanceId": "<mfa-instance-id>"
}
Option NameTypeExample Value
MfaCaptchaActivationModestringAfterFailures
MfaCaptchaFailureThresholdinteger3
MfaCaptchaProviderstringTurnstile
MfaCaptchaSiteKeystring0x4AAA...
MfaCaptchaSecretKeystring0x4AAA...

Integration with Other Protections

CAPTCHA operates alongside throttling and temporary locking:

  1. Temporary lock — if active, reject immediately
  2. CAPTCHA — if required, verify challenge before code verification
  3. Throttling — apply progressive delay
  4. Code verification — validate the MFA code
  5. Counter update — update failed attempts, check lock thresholds

TIP

For high-security deployments, enable CAPTCHA in AfterFailures mode with a threshold of 2–3, combined with throttling and temporary locking. This provides defense in depth against automated MFA bypass attempts.