ProtonMail / ProtonMail/WebClients
Autofill does not detect Authentik login fields (inputs inside shadow DOM)
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 5.6k
- Forks
- 715
- PR merge metrics
- No merged PRs in 30d
Description
Summary
The Proton Pass browser extension does not detect the username or password input fields on an Authentik (goauthentik.io) login page. No autofill dropdown appears, the fields are not highlighted, and no credentials are offered. The same login page is detected and autofilled correctly by 1Password and Bitwarden, so the form itself is fillable — Proton Pass's field detector is the outlier.
This may be related to #450 (autofill not working on elements inside the shadow DOM).
Environment
- Proton Pass extension: v1.37.2
- Browser: Brave (Chromium). Almost certainly affects all Chromium builds; #450 reports the same shadow-DOM detection failure on Firefox, so this is likely engine-independent.
- OS: Linux
- Target app: Authentik, current stable (2026.5.x)
Steps to reproduce (no private infrastructure required)
Authentik has no public hosted demo, but the official one-command Docker Compose quickstart stands up an instance in a few minutes:
wget https://docs.goauthentik.io/compose.yml
echo "PG_PASS=$(openssl rand -base64 36 | tr -d '\n')" >> .env
echo "AUTHENTIK_SECRET_KEY=$(openssl rand -base64 60 | tr -d '\n')" >> .env
docker compose pull
docker compose up -d
(Docs: https://docs.goauthentik.io/install-config/install/docker-compose/)
- Open
http://<host>:9000, set theakadminpassword when prompted. - Log out, then navigate to the login flow:
http://<host>:9000/if/flow/default-authentication-flow/ - With Proton Pass installed and a credential saved for the host, click into the username field.
Expected
Proton Pass detects the username field, highlights it, and offers the saved credential — as 1Password and Bitwarden do on the identical page.
Actual
Proton Pass does not detect the username or password field. No highlight, no autofill dropdown, no credential offered.
Root cause
Authentik renders its login flow as LitElement web components, and the actual inputs live inside shadow roots:
- Identifier stage:
<input name="uidField" autocomplete="username">inside the identification stage's shadow root. - Password stage:
<input name="password" autocomplete="current-password">inside the password stage's shadow root.
Proton Pass does not appear to pierce these shadow roots (or not deeply enough), so it never sees the fields. 1Password and Bitwarden traverse shadow DOM and fill the same page successfully.
Key diagnostic detail: Authentik can also render username + password as a single combined form on one page (rather than the two-step identifier → password flow). We tested that configuration, and Proton Pass still fails to detect the fields. This isolates the cause to shadow-DOM piercing, not the two-step split or the non-standard name="uidField". Shadow-DOM traversal in the detector is the fix.
Why this is on the Proton Pass side
Authentik has declined to change its markup — they will not restructure the web components or rename uidField (goauthentik/authentik #13716 and #8568, both closed as not-planned; #8568 was reproduced on Chromium/Linux). Since 1Password and Bitwarden already fill this exact page, the gap is solvable in Proton Pass's field detector by traversing open shadow roots.
References
- Proton Pass shadow-DOM autofill: ProtonMail/WebClients #450
- Authentik markup, wontfix: goauthentik/authentik #13716
- Authentik markup, wontfix (reproduced on Chromium/Linux): goauthentik/authentik #8568
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the Authentik login with the official Docker Compose quickstart, then locate the Proton Pass browser extension's autofill field detector. Trace detection for inputs inside open shadow roots, including the two-step and combined login flows described here. Done means both username and password fields are detected, highlighted, and offered for autofill on the Authentik page.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- frontend, security
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 68/100