Login and signup are where accessibility quietly fails. A user navigates your whole site, then hits a distorted-text CAPTCHA or a password field that fights their password manager, and the journey ends. WCAG 2.2 added a success criterion aimed squarely at this: 3.3.8 Accessible Authentication (Minimum), Level AA.
This guide is for developers who need a genuinely accessible CAPTCHA strategy and an auth flow that passes 3.3.8. We will cover what the criterion actually forbids, why most CAPTCHAs break it, and the concrete techniques that work: honeypots, server-side rate limiting, password manager support, and passkeys.
What WCAG 3.3.8 actually requires
3.3.8 Accessible Authentication (Minimum) is a new Level AA criterion in WCAG 2.2 and part of the EN 301 549 baseline that the European Accessibility Act enforces from 28 June 2025. The rule: no step in an authentication process may require a cognitive function test unless an alternative method exists, or a mechanism assists the user.
A cognitive function test is anything that asks the brain to remember, transcribe, solve, or recall. That explicitly includes memorizing a password, retyping a one-time code from memory, and solving a puzzle. The criterion lists two exceptions that are allowed without an alternative:
- Object recognition ("select all the images with a bus") is permitted, because identifying common objects is not treated as a cognitive function test.
- Identifying non-text content the user provided themselves (for example, a personal image they uploaded) is permitted.
Distorted-text CAPTCHAs and logic or math puzzles fall outside those exceptions. They test transcription and problem-solving, so a puzzle-only gate fails 3.3.8. The related Level AAA criterion, 3.3.9 Accessible Authentication (Enhanced), removes even the object-recognition exception, so the strongest target avoids image-selection challenges entirely.
Why traditional CAPTCHA breaks accessibility
The classic squished-text CAPTCHA is a transcription test with poor contrast, no real text alternative, and a time limit. Audio fallbacks are notoriously hard to parse and useless to deaf-blind users. Image grids that fade in new tiles on each click create a moving target that frustrates screen reader and switch-device users alike.
Invisible scoring services (the "I'm not a robot" style) are better because they usually pass without interaction, but they degrade to an image puzzle when the score is low, and that fallback is the part that fails 3.3.8. Treat any challenge that can surface a puzzle as a conformance risk. If you must keep a visible widget, audit it against the broader rules in our overview of WCAG success criteria.
Honeypots and server-side defenses: the accessible-CAPTCHA default
For most forms, the best accessible CAPTCHA is no visible CAPTCHA at all. A honeypot field is invisible to humans but tempting to naive bots that fill every input. The trick is hiding it from assistive technology too, not just sighted users.
A honeypot done right
- Hide the field with CSS and ARIA, never with type=hidden (bots ignore those, and real autofill can populate them). Use a wrapper with position:absolute; left:-9999px plus aria-hidden="true" and tabindex="-1" on the input.
- Add autocomplete="off" and a neutral name like "contact_time" so password managers and browser autofill leave it empty.
- On submit, reject the request server-side if the field has any value. Pair it with a hidden timestamp and reject submissions completed in under two seconds.
Honeypots stop low-effort bots with zero friction for disabled users. Layer them with server-side rate limiting per IP and per account, plus anomaly detection on signup velocity. These defenses are invisible, so they raise no 3.3.8 concern and add nothing for keyboard or screen reader users to navigate. For the surrounding form markup, follow our guide to accessible forms so labels, errors, and the honeypot's neighbors stay correct.
Support password managers and passkeys
Passwords are themselves a cognitive function test. 3.3.8 is satisfied when a mechanism lets users avoid recalling them, and the simplest mechanism is a password manager that fills the field. Your job is to not block it.
Do not break autofill
- Use correct autocomplete tokens: autocomplete="username" on the email or username, autocomplete="current-password" on login, autocomplete="new-password" on signup and reset.
- Never disable paste on password fields. Blocking paste defeats password managers and directly fails the criterion.
- Keep inputs as real, named form controls. Custom div-based fields and split one-character-per-box OTP inputs prevent managers and SMS autofill from working; use a single input with autocomplete="one-time-code" instead.
- If you enforce 2FA, let the platform autofill the code rather than forcing manual transcription from memory.
Passkeys (WebAuthn) are the strongest answer: authentication happens via a device biometric or PIN, with no password to memorize and nothing to transcribe, so the cognitive test disappears for everyone. Two more WCAG 2.2 criteria reinforce this: 3.3.7 Redundant Entry (Level A) says do not make users re-enter data already provided in the same process, and 3.2.6 Consistent Help (Level A) wants support options in a consistent place. Verify your real login and reset flows with a quick run of the AccessScan checker, and confirm the form is operable end to end using our keyboard accessibility guide.
A practical checklist for accessible auth
- Remove any CAPTCHA that can present distorted text or a logic puzzle; replace it with honeypots plus server-side rate limiting.
- If you keep a challenge, ensure an accessible alternative path exists so no single step depends on a cognitive test.
- Confirm autocomplete tokens are present and paste is never blocked on password and OTP fields.
- Offer passkeys, or at minimum support email magic links, so users can authenticate without recalling a password.
- Make sure focus is visible and not obscured (2.4.7, 2.4.11) and that interactive targets meet 24x24 CSS px (2.5.8) throughout the flow.
- Re-run a scan and a manual keyboard pass after every auth change, then record the result in your accessibility checklist.
Auth is the highest-stakes flow on most sites for EAA-covered sectors like e-commerce and banking. Getting 3.3.8 right is less about clever widgets and more about removing the obstacles you already added. Scan your login flow with AccessScan to confirm nothing regressed.