Reputation policies against password spraying in authentik

Use authentik reputation policies to challenge or deny clients that show failed logins or suspicious requests, and tune them so shared IP addresses are not locked out.

On this page

How reputation policies help stop password spraying in authentik

Picture a team whose login page logs a steady stream of failed sign-ins. Each account sees only a few wrong passwords, spread across hundreds of usernames and arriving from a handful of addresses. This is password spraying: an attacker tries one common password against many accounts so that no single account trips a lockout. This page answers one question: how do you respond to low-reputation clients in authentik before the spray succeeds? The reputation policy is the control built for that signal. According to the authentik policies documentation, it responds to failed logins or suspicious sign-in activity, for example by showing a CAPTCHA to requests whose reputation score is low. Reputation is tracked per client, so it fits spraying better than per-account lockout, which a spray is designed to avoid.

Teams usually need a reputation policy when failed logins come from many accounts and the attacker stays under per-user thresholds. Per-account rules, such as password rules or account lockout, protect a single user well but do little against a slow, wide spray. Geography and network allowlists are also useful, yet they cannot separate a legitimate user on a home connection from a hostile client in the same country. A reputation policy adds a challenge that cost-sensitive attackers find expensive to pass at scale. Before you attach one, confirm in your authentik version how reputation scores are recorded and decayed, and whether your login flow is the one the policy is bound to. The authentik hardening guide, linked from this page, also recommends notifications for login_failed and suspicious_request events so the team sees the spray as it happens.

Choosing a response: CAPTCHA, deny binding or notification

A reputation policy checks the reputation of the client making the request, which builds up from failed logins and other suspicious activity. When the score is low, the flow can present a CAPTCHA before it continues. Legitimate users with a clean history never see the challenge, so this response adds friction only where the signals suggest a problem. It fits sign-in flows that serve a large, mostly trusted population, where a password sprayer should be slowed down without blocking ordinary people. The trade-off is that a user on a shared address who has been caught up in someone else's failed attempts may still be challenged, and a bot that solves CAPTCHAs will get through.

  • Best fit: public or partner-facing login flows with many users who sign in from varied networks.
  • User experience: most users see nothing; affected users see one extra step that they can usually complete.
  • Limit: a CAPTCHA raises the cost for automated attacks but does not stop a determined actor.
  • Dependency: the CAPTCHA provider must be reachable from your network, which matters in restricted or air-gapped environments.
  • Tuning point: the score threshold decides how many clients get challenged, so test it against real traffic.

Before you choose this response, confirm which CAPTCHA provider your deployment will use and how the reputation threshold behaves on your authentik version.

Reputation policy configuration options and when each fits

This table compares the main choices for a reputation policy against password spraying: the threshold, where the policy is bound, the response (CAPTCHA, deny or notification) and tuning for shared IP addresses. Read each row against the situation it suits, then confirm the exact setting names and defaults in your authentik version before you rely on them.

OptionWhat it doesWhen it fitsCheck before you rely on it
Reputation thresholdSets the score below which a client is treated as suspicious, so the response triggersLower thresholds suit tenants with few shared networks; higher thresholds suit offices or carriers behind NATConfirm the scoring behavior and the default value in your version's policy documentation
Binding to a login flowEvaluates the reputation policy during sign-in, before the password or MFA stageProtecting the password step against spraying across many accounts from one sourceConfirm the binding order so the policy runs before the password stage
Binding to an enrollment flowEvaluates the policy when a new account is being created or invitedStopping automated sign-ups or invitation abuse on public-facing enrollmentOnly bind where enrollment is open; invitation-only flows may not need it
Negated deny bindingDenies access when the client's reputation is not low enough to pass, so the threshold acts as a gateStrict environments where a suspicious client should get no challenge at allTest with a known-good client first; a wrong threshold denies legitimate users
CAPTCHA stage for low reputationShows a CAPTCHA only to clients whose reputation is below the thresholdBalanced setups that want users with a clean history to sign in without extra stepsConfirm the CAPTCHA stage order and the provider available in your version
Unconditional CAPTCHAShows a CAPTCHA to every login attempt on the bound flowActive campaigns or public portals where attacker traffic is hard to separate from usersExpect more friction for all users, including service-related sign-ins that cannot solve it
Notification binding (login_failed, suspicious_request)Sends an alert to administrators when failures or suspicious requests occurAny deployment, as the first signal that spraying is happeningConfirm the event names and the notification transport configured in your instance
Shared IP tuningAdjusts thresholds, exemptions or GeoIP conditions for offices, VPN egress and carrier NATOrganizations where many users share one public addressTest with a group of users on the same egress IP before widening the rule to production

How to configure reputation policies step by step

This sequence takes a running authentik instance from a version check to a tested reputation policy that challenges or denies clients with poor reputation during login. Each step ends with a check so the team knows the layer works before it relies on it.

  1. Confirm the version and the login flow in use

    Start by recording the authentik version the instance runs and the authentication flow that users actually pass through for password login, including any stages already attached to it. Check the version against the security policy so you know whether it receives security fixes, and confirm the version on the releases page before you change anything. Export or screenshot the current flow bindings so you can roll back. The step is done when you can name the version, the flow slug, and the stages in order, and when a test login through that flow succeeds on the unchanged configuration.

  2. Create the reputation policy

    In the admin interface, open the policy section and create a reputation policy. Set a name that says what it does, such as the flow it protects, and set the threshold that decides when the policy matches. Keep the first version narrow so you can see which clients it affects. Do not add a deny action yet. The step is done when the policy appears in the policy list with its settings saved and no errors shown, and when the policy's reputation configuration matches what you wrote down in the design notes.

  3. Bind the policy to the login flow

    Attach the policy to the password or identification stage of the login flow as a policy binding, not to the whole application. Set the binding order and the failure behavior so that matching clients reach the next decision point you add in the following step. Leave the binding disabled for the moment if your change process requires a review before activation. The step is done when the flow editor shows the binding in the expected position and a login from a clean test client still completes without a challenge.

  4. Add the CAPTCHA or deny path

    Decide how low-reputation requests are handled. The documented options are a CAPTCHA stage for matching clients, or a negated deny binding that blocks them. Many teams start with the CAPTCHA path because it lets real users with a shared address continue. If you use CAPTCHA, attach a CAPTCHA stage that you have already configured and verified. Confirm the CAPTCHA provider and its keys with your own team, since provider setup is covered separately. The step is done when a low-reputation test client is shown the challenge or denied as designed, and a clean client is unaffected.

  5. Add notifications for login failures

    Create notification rules for the events the hardening guidance points to: login_failed and suspicious_request. Route them to a transport your security team monitors, and restrict the rule to the affected flow or severity so the channel is not flooded with noise from unrelated events. Confirm the recipient list with the people who will act on alerts. The step is done when a deliberately failed test login produces a notification in the configured channel and the message contains the event type and the client details your responders need.

  6. Test with controlled failed logins

    Use a test account and a test client that you control to generate failed logins from one address until the reputation score drops. Confirm that the policy triggers at the expected count, that the CAPTCHA or deny path behaves as designed, and that a successful login from a different clean client still works. Check the authentik event log for the matching entries and confirm the notification arrived. Record the results, including any client that was affected unexpectedly. The step is done when the expected behavior is documented for each case and no legitimate test user was blocked.

  7. Review shared address impact before enforcing

    Before you switch the deny path to enforcement or extend the policy to more flows, review the logs for clients that share an address, such as offices, VPN exits or carrier-grade NAT. Ask your identity and network teams which address ranges are shared and decide whether those clients should receive a CAPTCHA instead of a deny. Tune the threshold or add exceptions only where the evidence supports it. The step is done when you have a written list of shared ranges, the chosen handling for each, and a rollback path that another administrator can execute.

Tuning reputation to avoid locking out shared IP addresses

Shared egress addresses are the main reason a reputation policy can lock out legitimate users. Reputation is tied to the client address, so an office, a carrier-grade NAT pool or a VPN concentrator can make many people look like one client. When one of them mistypes a password repeatedly, or an attacker sprays from behind the same address, the score falls for everyone behind it. Before you set any threshold, ask your network team to list every egress address your users sign in from, including VPN exits and the addresses mobile users reach you through, and mark which ones are shared. Treat that list as the test population for every change you make.

Tune in this order: a CAPTCHA first, then a deny. The authentik hardening guide recommends either a CAPTCHA for low-reputation requests or a negated deny binding, and it treats an unconditional CAPTCHA as optional. A CAPTCHA lets a person behind a shared address prove they are not a script without being shut out. Scope the deny binding to the flow or application under attack, so that a session on a clean address is not affected by reputation earned elsewhere. Adjust the threshold in small steps and confirm the settings and defaults in the policy screen of your installed version, since the documentation describes the behavior while your version controls the values. Test each step with a lab account signing in from every shared address on your list.

Monitoring tells you whether the tuning holds after launch. Configure notifications for the login_failed and suspicious_request events that the hardening guide names, and route them to the team that handles identity support and to a shared mailbox someone checks daily. Each week, compare challenges and denials against support tickets and against the addresses your network team has already marked as shared. A cluster of denials from one office address shortly after its staff signed in successfully is the typical sign of a false positive. Write down the rollback before go-live: which binding to disable, who may disable it, and what users should do while it is off.

Security and operational risks of reputation policies

A reputation policy is only as good as the signals behind it and the operations around it. The cards below cover the ways attackers adapt, the ways legitimate users get caught, and the platform and alerting checks that keep the control working over time.

Attackers rotating source addresses

Password spraying campaigns often distribute attempts across many IP addresses, so each address accumulates only a few failures. A reputation score built on per-address history can stay low for longer than the attack lasts. Review whether your scoring window and thresholds would catch a slow, distributed spray, and pair reputation with account-level signals such as failures against many different usernames from one source. Test this with a controlled spray from several addresses in a staging environment.

Shared addresses blocking legitimate users

Corporate NAT gateways, branch offices, mobile carriers and VPN egress points can place many honest users behind one address. A single user's typos can then lower the reputation of everyone behind it. Before enforcing a deny binding, list the known shared egress addresses in your environment, and decide whether those sources get a CAPTCHA challenge rather than a block. Confirm with your network team which addresses are shared.

CAPTCHA bypass and tampering

A CAPTCHA stage only helps if the flow cannot skip it. Check that the reputation policy binding sits on the stages that matter, that no alternate flow or direct API path reaches authentication without the challenge, and that only administrators with the right permissions can edit the stage or its provider settings. Also confirm how your chosen CAPTCHA provider verifies responses on the server side.

Notification fatigue

The hardening guide recommends notifications for login_failed and suspicious_request events. If every event produces an alert, administrators will stop reading them, and a real spray will look like routine noise. Decide which events go to a person, which go to a log store for review, and how often a threshold should page someone. Revisit alert volume after the first few weeks of production traffic.

Running an unsupported version

Reputation logic, flow stages and security fixes change between releases, and an unpatched authentik can carry known weaknesses. The security policy lists 2026.5.x and 2026.8.x as the supported versions receiving security fixes, and the project announces security releases at least 24 hours in advance. Confirm which release line you run, subscribe to release notices, and plan a window to apply security releases on that schedule.

Lockouts without a recovery path

A deny binding that catches a shared address or a misconfigured policy can block administrators as well as attackers. Keep at least one break-glass administrative route that does not depend on the policy under test, and document how to remove or disable a binding from the database or the admin interface. Rehearse this recovery before enforcing deny rules in production, not during an incident.

Limits to confirm in your environment before relying on reputation

How does the authentik reputation score change after failed logins in my version?

The exact scoring behavior depends on the authentik version you install, so confirm it against the documentation for that release before you set thresholds. The policies documentation describes the reputation policy as responding to failed logins and suspicious sign-in activity, but it does not give you a reason to assume a specific score change per event. Test the behavior in a non-production instance by triggering failed logins from a known address and recording when the policy starts to match. Keep that record with your change documentation so that a later upgrade can be compared against it.

Can an authentik reputation policy match on attributes other than the client IP?

Confirm this in your installed version before you design around it. Reputation is commonly associated with the client address, and most of the planning in this topic assumes that key. If you need to react to a specific username pattern, device, or user group, check the policy and expression options in the policies documentation and decide whether a separate rule is needed. Do not assume that a reputation rule can see user attributes unless you have tested it in your environment.

Will reputation work correctly behind a reverse proxy that passes client IPs?

It depends on whether authentik sees the real client address. If a reverse proxy or load balancer in front of authentik does not pass the original client IP in a header that authentik trusts, every login may appear to come from the proxy, and one attacker can affect everyone. Verify the forwarded-address settings in your reverse proxy and authentik configuration, then run failed logins from two different source addresses and confirm that the scores are tracked separately. Also confirm that untrusted clients cannot spoof the forwarded header, because a spoofed address would let an attacker avoid the policy.

Which CAPTCHA provider should we choose for a low-reputation challenge?

The provider choice depends on your data residency rules, whether you can accept an external service call during login, and whether you need a self-hosted option. The authentik CAPTCHA stage documentation covers the supported providers, and the self-hostable Cap provider was added in 2026.8, so confirm that your version includes it before planning around it. Check how each provider handles user data, its availability, and how it behaves for users with assistive technology. Test the chosen provider end to end, including the failure path when the verification service is unreachable.

How do GeoIP rules and reputation policies interact in one flow?

They are separate controls, and their order and bindings decide what a user experiences. A GeoIP restriction may deny a login before reputation is evaluated, or the reverse, depending on how the policies are bound to the stages in your flow. Map the order of every policy in the flow, then test one login from an allowed country with a poor reputation and one from a blocked country with a clean record. Also confirm what happens if the GeoIP database is missing or outdated, because that affects the country signal that your rules depend on.

Do password rules change how reputation policies behave during a spray?

Password rules and reputation controls address different failures. Password complexity and breach checks reduce the chance that a guessed or leaked password works, while reputation slows repeated attempts from one source. Neither replaces the other. Confirm in your environment whether a rejected password attempt counts as a failed login for reputation purposes, because that determines how quickly the policy reacts. Test it with a deliberate series of wrong passwords and record the outcome.

How much effort will tuning take to avoid locking out shared IP addresses?

The effort depends on how many users sit behind shared addresses, such as corporate NAT, carrier gateways, or a branch office, and on how many applications authentik protects. The main work is measuring legitimate failure rates for each network segment, choosing thresholds, and testing with real user patterns in a pilot group. Ask any implementation partner for a written scope that includes the test plan, the lockout recovery procedure, and who approves threshold changes. Recurring effort continues after go-live as your traffic changes.

Which authentik release should we validate against before going to production?

Validate against the release line your organization will run, and check that it is in the supported set listed in the security policy. The security policy lists 2026.5.x and 2026.8.x as the supported versions receiving security fixes, and the project announces security releases at least 24 hours in advance. Because the latest release shown on GitHub is 2026.8.4, confirm the version you plan to deploy and read its release notes for any changes to policies, stages or the CAPTCHA provider list before you rely on those behaviors.

How DeployOpen scopes and tunes authentik reputation controls

DeployOpen plans reputation policies against password spraying as part of the wider login flow, not as a standalone rule. We scope the failed-login and suspicious-request responses, build them in your own authentik deployment, and hand over documented settings your team can tune.

How we scope

  • Inventory the login flows, providers and user populations that reputation policies will protect before any rule is written.
  • Agree in writing which events trigger CAPTCHA, deny bindings or notifications, and which shared IP ranges must be exempted.
  • Engagements are fixed-scope, with deliverables and timelines agreed before work starts. Ongoing tuning is available as a retainer.

How we build

  • Configure reputation policies, CAPTCHA stages and deny bindings in a staging instance, following the hardening guidance for login_failed and suspicious_request events.
  • Test each path with failed-login sequences from representative clients, including shared NAT addresses, to confirm lockouts stay contained.
  • Review GeoIP and notification settings alongside reputation rules so that overlapping controls do not block legitimate users twice.

How we hand over

  • Document each reputation threshold, binding and exemption with its purpose, owner and the change process that governs it.
  • Provide a runbook for responding to alerts, reviewing reputation scores and clearing a wrongly blocked address.
  • Walk your security and identity operations staff through the configuration so they can adjust settings without relying on us.

How we support

  • Confirm the authentik version in use and plan upgrades against the supported release list before changing policy configuration.
  • Review login failure notifications and reputation trends with your team on the schedule agreed in the retainer or handover.
  • Re-test controls after authentik upgrades, new providers or changes to your reverse proxy or IP addressing.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.