Skip to content
Version v3.2.4

Account lockout and legacy throttling ​

UserStore provides permanent account lock, temporary account lock, progressive throttling, and CAPTCHA. These established controls remain available after layered abuse protection is activated.

Why several controls are necessary ​

Each control solves a different problem:

ControlPrimary purposeImportant trade-off
Progressive throttlingMakes repeated guesses slower.Holds requests while delaying and does not stop distributed spraying.
Temporary lockGives an attacked account time to recover automatically.An attacker can temporarily deny service to the user.
Permanent lockStops further attempts against a confirmed high-risk account.Requires administrator intervention and can be abused for denial of service.
CAPTCHASeparates automated traffic from an interactive user.Requires an accessible alternative and provider availability.
Layered abuse protectionDetects account, identifier, network, tenant, and system patterns across nodes.Requires a conforming distributed state store in multi-instance deployments.

For internet-facing and multi-instance deployments, use these controls together with layered abuse protection. Account lock alone does not stop password spraying across many users.

Permanent account lock ​

A user is permanently locked after the configured number of consecutive failed password attempts when that user's IsUserLockEnabled property is enabled. An administrator must unlock the user.

OptionValid valuesDefault
AttemptsBeforeUserLockedNon-negative integer; 0 disables7

A successful password login resets the failed-attempt counter. Invalid persisted values are logged and permanent lock is disabled until corrected; temporary lock and throttling continue independently.

Denial-of-service risk

Do not use permanent lock as the only abuse control for a public application. An attacker who knows a login name can deliberately lock the account.

Temporary account lock ​

Temporary lock rejects all password attempts, including a correct password, until the duration has elapsed.

OptionValid valuesDefault
TemporaryLockEnabledBooleanfalse
TemporaryLockThresholdPositive integer5
TemporaryLockDurationSecondsPositive integer3600

Temporary and permanent lock use the same established failed-password counter. Configure the permanent threshold above the temporary threshold if both are active.

For most customers, a 5–15 minute temporary lock is less disruptive than the one-hour compatibility default. Validate the chosen value against helpdesk and abuse-response requirements.

Progressive throttling ​

Legacy throttling increases the delay with consecutive failed password attempts:

text
delay = min(BaseDelayMs × 2^(failedAttempts - 1), MaxDelayMs)
OptionValid valuesDefault
ThrottlingEnabledBooleanfalse
ThrottlingBaseDelayMsNon-negative integer1000
ThrottlingMaxDelayMsNon-negative integer30000

This delay is distinct from AbuseMaximumDelayMilliseconds, which caps distributed layered decisions.

Lock-state feedback ​

When a correct password is submitted for a locked account, ProAuth can either explain the lock or return the same generic message used for invalid credentials.

OptionValuesDefault
InformAboutLockAfterSuccessfulLoginBooleantrue

Set it to false for public or penetration-test-hardened deployments to avoid confirming that an attacker guessed the correct password. Keeping it true can reduce support requests in internal environments.

CAPTCHA ​

Use CaptchaActivationMode and CaptchaFailureThreshold to decide when password login requires a challenge. CaptchaProvider, CaptchaSiteKey, and CaptchaSecretKey configure the provider. The obsolete CaptchaEnabled value remains readable for compatibility but should not be used for new configuration.

Layered Challenge decisions feed the same password-login CAPTCHA path. A missing provider configuration fails safely rather than silently allowing the attempt.

DeploymentStarting point
Public consumerActivate layered defaults, enable CAPTCHA, set InformAboutLockAfterSuccessfulLogin=false, enable a short temporary lock, and consider disabling permanent lock if denial of service is a greater concern.
WorkforceActivate layered defaults, enable progressive throttling and a short temporary lock, and tune network/tenant capacity for office NAT or VPN traffic.
Privileged or regulatedUse layered defaults, CAPTCHA, temporary lock, explicit hard block for confirmed compromise, lock notifications, and alerting. Permanent lock can be appropriate when the response process is staffed.

Configure options ​

These are UserStore IDP-instance options. Configure them in AdminApp, through Management API v2 option resources, through generated v2 clients, or with ProAuth CLI configuration import.

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

{
  "name": "TemporaryLockEnabled",
  "value": "true",
  "applyToIdpInstanceId": "<idp-instance-id>"
}

The server validates runtime values. Test threshold relationships and user-visible behavior in a non-production instance before applying them broadly.

Infrastructure protection ​

Application controls protect identities and recovery journeys. A trusted reverse proxy, load balancer, CDN, or WAF should also limit connections and requests to protect CPU, memory, network, and PBKDF2 capacity.

Configure forwarded headers only from trusted proxies; layered network dimensions are ineffective if an attacker can supply the apparent client address.