Status: CURRENT — MAJOR 2026 UPDATE
Last reviewed: 31 August 2026
Applies to: Home Assistant, Authentik and Traefik with the Home Assistant Companion AppThe original two-hostname workaround in this article still explains a real problem, but the component it relied on has now been archived. In 2026 I recommend authenticating Home Assistant directly with Authentik over OIDC instead of putting Authentik Forward Auth in front of Home Assistant.
I absolutely love logging into Authentik once and getting SSO across the homelab. Home Assistant used to be one of the awkward exceptions.
The original version of this article solved that by creating two Traefik routes:
- A browser hostname protected by Authentik Forward Auth, using
hass-auth-headerto log the user into Home Assistant. - A second hostname that bypassed Authentik and showed Home Assistant’s normal login page so the Companion App could authenticate.
That workaround worked, and judging by the traffic/comments it helped quite a few people. But the Home Assistant authentication landscape has changed enough that I wouldn’t build a fresh setup that way now.
What changed?
The BeryJu/hass-auth-header component used by the original guide was archived on 23 October 2025. Its maintainer specifically points users toward newer Home Assistant OIDC integrations instead.
A maintained community project called OpenID Connect for Home Assistant now lets Home Assistant itself authenticate against Authentik using standard OIDC.
That means Authentik no longer needs to sit in front of Home Assistant as a Forward Auth middleware. Traefik just proxies Home Assistant normally, and Home Assistant performs the Authentik login itself.
Why this is better for the Companion App: the maintained OIDC integration is designed to handle Home Assistant login in both the web interface and Companion App. Its maintainer specifically advises removing reverse-proxy-level authentication when migrating from header-auth setups, because an extra authentication layer in front of Home Assistant can interfere with the app’s login flow.
Recommended 2026 setup
The new layout is much simpler:
Browser / Companion App
↓
https://home-assistant.richay.au
↓
Traefik
↓
Home Assistant
↓
Authentik via OIDCThere is only one Home Assistant hostname, and there is no Authentik Forward Auth middleware in front of it.
1. Keep Traefik as a normal reverse proxy
Current Traefik does not need any special configuration for Home Assistant’s WebSocket traffic. A normal HTTPS router is enough.
Home Assistant changed its HTTP defaults in 2026.8:
- Home Assistant OS: new default HTTP server port is
80. - Home Assistant Container: default remains
8123. - If you’ve manually configured another port, use whatever is shown under Settings → System → Network → HTTP server.
For a current Home Assistant OS install using port 80, my Traefik dynamic config would look roughly like this:
http:
routers:
home-assistant:
entryPoints:
- "https"
rule: "Host(`home-assistant.richay.au`)"
tls: {}
service: home-assistant
services:
home-assistant:
loadBalancer:
servers:
- url: "http://10.10.10.10:80" # Home Assistant OS 2026.8+ defaultIf you’re running Home Assistant Container, or your HAOS instance still uses the old/custom port, change the backend to:
url: "http://10.10.10.10:8123"There is deliberately no Authentik middleware on this router. OIDC happens inside Home Assistant.
2. Configure Home Assistant to trust Traefik
Another 2026 change: from Home Assistant 2026.8, the HTTP server/reverse-proxy settings moved out of configuration.yaml and into the UI.
Go to:
Settings → System → Network → HTTP serverEnable Trust X-Forwarded-For and add Traefik under Trusted proxies.
If Traefik reaches Home Assistant from a Docker network such as 172.22.0.0/16, that is the network you would trust.
Don’t blindly trust your entire home LAN. The old version of this article included the whole
10.10.10.0/24home network as a trusted proxy. Home Assistant’s setting is specifically for reverse proxies that are allowed to supplyX-Forwarded-For. Trust only the Traefik IP/network that actually proxies the request.
If you’re still running a Home Assistant release before 2026.8, the equivalent old YAML was:
http:
use_x_forwarded_for: true
trusted_proxies:
- 172.22.0.0/16 # Replace with your Traefik proxy network3. Install the Home Assistant OIDC integration
Install OpenID Connect for Home Assistant through HACS.
After installing and restarting Home Assistant, go to:
Settings → Devices & Services → Add Integration → OpenID Connect/SSO AuthenticationThe integration includes an Authentik-specific setup flow.
4. Create the Authentik OIDC application
In Authentik, create an Application with an OAuth2/OpenID Connect Provider.
The current integration guide recommends a Strict redirect URI of:
https://home-assistant.richay.au/auth/oidc/callbackSelect an Authentik signing key so the provider uses signed ID tokens. The current Authentik setup guide for this integration uses an RS256 signing key.
Make note of the:
- Client ID
- Client Secret, if you’re using a confidential client
- Application/provider slug
The OIDC discovery URL will look like:
https://auth.example.com/application/o/home-assistant/.well-known/openid-configurationReplace the Authentik hostname and provider slug with your own.
5. Configure Home Assistant
In the Home Assistant OIDC integration:
- Select Authentik.
- Enter the Authentik discovery URL.
- Enter the Client ID and Client Secret if required.
- Configure user/group/role mapping as needed.
- Test SSO before removing or disabling any local login method.
Keep a local break-glass Home Assistant admin. Don’t make an external identity provider your only way back into the system until you’ve tested browser and Companion App login properly.
6. Use the same URL in the Companion App
The Companion App can now use the same address as the browser:
https://home-assistant.richay.auThere should no longer be a need for a second home-companion.* hostname just to bypass Authentik, because Authentik is no longer authenticating at the reverse-proxy layer.
Keeping Home Assistant private with Tailscale
You don’t have to publish the Home Assistant hostname to the open internet.
Home Assistant’s own current remote-access documentation lists VPN access such as Tailscale as a secure option. If your phone stays connected to Tailscale, the Companion App can continue updating sensors and reaching Home Assistant through the VPN.
I use Split DNS for this type of setup so the nice *.richay.au names resolve to my internal reverse proxy only while I’m at home or connected to Tailscale.
My guide is here: Tailscale Split DNS by Domain for Secure Home Server Access.
Legacy method — the original two-hostname workaround
LEGACY / NOT RECOMMENDED FOR NEW INSTALLS
I’m keeping this section because this article was widely used and existing installations may still be running it. The method relies on the now-archived
hass-auth-headercustom component.
The original workaround looked like this:
Browser
↓
home-assistant.example.com
↓
Traefik + Authentik Forward Auth
↓
X-authentik-username
↓
hass-auth-header
↓
Home Assistant
Companion App
↓
home-companion.example.com
↓
Traefik WITHOUT Authentik
↓
Normal Home Assistant loginThat architecture solved the Companion App problem because the app never had to pass through Authentik Forward Auth.
However, the second hostname is not magically secure. If home-companion.example.com is publicly reachable, anyone can reach Home Assistant’s normal login screen through it. Making the hostname obscure is not meaningful protection.
If you continue using this old method, make the Companion hostname private using LAN DNS, Tailscale Split DNS, a VPN, firewall rules, or another real access-control boundary.
Legacy hass-auth-header configuration
The custom component itself still expected something similar to:
auth_header:
username_header: X-authentik-usernameReverse-proxy trust is separate. On current Home Assistant releases configure Traefik under Settings → System → Network → HTTP server rather than adding a new http: YAML block.
The archived
hass-auth-headerproject itself warns that a bad configuration can allow unintended access to Home Assistant. If you keep using it, only trust headers arriving from your actual reverse proxy and plan a migration to OIDC.
Why Authentik Forward Auth can still break the Companion App
This part of the original article remains relevant.
Reverse proxying Home Assistant is fine. The problem is adding a separate authentication wall in front of Home Assistant.
The current Home Assistant OIDC integration’s maintainer explicitly describes reverse proxy + proxy-level authentication as an unsupported scenario for the Companion App. When the login flow leaves the Home Assistant domain for an extra proxy authentication step, the app can fail to complete its own authorization hand-off.
That’s why the modern solution is:
Traefik: reverse proxy only
Home Assistant: handles authentication
Authentik: OIDC identity providerrather than:
Traefik: reverse proxy + authentication gate
Home Assistant: receives pre-authenticated headersTroubleshooting
If the browser works but the Companion App does not:
- Make sure you are not still applying an Authentik Forward Auth middleware to the Home Assistant router.
- Make sure the app is using the same Home Assistant hostname configured in the Authentik redirect URI.
- Confirm Home Assistant trusts Traefik as a reverse proxy.
- Confirm the OIDC callback is exactly
/auth/oidc/callback. - Test local Home Assistant login as a fallback before assuming the issue is OIDC.
- Check Home Assistant logs and Authentik provider/outpost logs during the login attempt.
If Home Assistant returns 400 Bad Request behind Traefik, check the HTTP Server settings and confirm the Traefik IP/network is listed under Trusted proxies.
References
- OpenID Connect for Home Assistant
- Authentik configuration for Home Assistant OIDC
- Archived hass-auth-header project
- Home Assistant HTTP / reverse proxy documentation
- Home Assistant Companion App networking
- Authentik Forward Auth documentation
- My Tailscale Split DNS guide
The old workaround did its job, but this is one of those rare cases where the newer method is actually simpler: one hostname, proper OIDC, no header-auth hack, and the Companion App doesn’t need its own secret back door 🙂

Thx for tuto . I ll need your help for this . Did it once with home assitant docker but impossible with home assistant supervisée installed on host …. I added proxies but still got error shot xforward for message . Showing xforward : « ,10.0.100.1 » instead of xforward : « 10.0.0.1 » . CAN I have your help ?
Hey mate, Im using HA OS, and not a docker version of Home Assistant? Is that the same one you are using? and which reverse proxy are you using?
I’m on nginxproxymanager so the configuration differs a bit, but isn’t this just adding another entrypoint home-companion.xxxxxx that won’t go through Authentik and therefore won’t be authentified? What’s the advantage of keeping the secured home-assistant.xxxxxx entrypoint in parallel since it can easily be bypassed?
Thanks for the work!
It is, but having authentik on the webpage allows auto logins through authentik 😉
but you can make the companion entry point something obscure so its harder to guess, as you will only need to add and login once. Unfortunately Authentik wont work for companion app login yet, and I need it for my location automations 🙂
I’m using tailscale with split domain dns on my phone, domain: richay.au requests go to my private dns on my home server which has A records and CNAMES set, so my companion app entry point isnt accessible unless on my home network or logged into tailscale. Dont have to do anything special once setup to flick between home server webapps and normal internet browsing. https://richay.au/tailscale-split-dns-by-domain-for-secure-home-server-access/