fix(authelia): restrict the Headscale login to admin and client groups #247
Loading…
Reference in a new issue
No description provided.
Delete branch "jfraeys/fix/headscale-oidc-groups"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Second half of the Headscale access change (the ACL is #246). The headscale OIDC client used the default one_factor policy, so any LLDAP user could sign in and enroll a device. New named policy 'headscale' (default deny) allowing group:admin, authelia_headscale_extra_groups (default empty), and client--admin / client--employee for every client_sites entry with auth: authelia, the same groups the admin-panel access rules already use, so the coaching multi-instance work needs no extra step.
Validated locally with the real Authelia image (4.39.28): the template rendered through Ansible with dummy secrets passes 'authelia validate-config' (only the existing deprecation warnings), the validator lists 'headscale' among the valid policy names, and it rejects a client naming an undefined one. The baseline template renders and validates the same way. Operator check: LLDAP shows user jfraeys in group admin; no client users exist yet.
Effect when deployed: only NEW sign-ins are checked; existing devices keep working until their node key expires. A user outside these groups gets Authelia's access-denied page at Headscale login.
Risk: Authelia serves SSO for Forgejo, Vaultwarden, Grafana and Headscale. A bad config would stop it, so this goes through staging (the Authelia role runs there and must come up healthy) before promotion. Deploy: ./infra deploy --tags authelia --limit services; then check that sso.jfraeys.com / auth login still works and sign-in to Forgejo succeeds.
Order with #246: independent. Do #246 first (ACL), this second.
🤖 Generated with Claude Code
https://claude.ai/code/session_01Ge5tovcwdEUBtPwUktsZZZ