Tech Digest

Research

The single sign-on gap

A homelab is only as unified as its worst application, and about a third of the ones people actually run have no way to accept an outside identity at all.

Last reviewed

How many self-hosted apps actually support single sign-on?

Of the 90 indexed self-hosted tools that have user accounts, 45 support OIDC natively (50.0 percent) and 51 support it in some form including official plugins (56.7 percent). 28 of them, 31.1 percent, offer nothing you can federate: local accounts, a shared password, or an auth proxy in front and a second login behind it. That last group is what stops a homelab from having one login, and no identity provider can fix it for you.

Of the 90 indexed tools that have user accounts, 45 support OpenID Connect natively, which is 50.0 percent. Counting official and de-facto plugins takes it to 51, or 56.7 percent. The remaining 28, 31.1 percent, have nothing to federate: local accounts, a single shared password, or no authentication at all and an instruction to put a proxy in front.

That last number is the one that decides your architecture. You do not get a unified login by picking a good identity provider. You get it by not running anything from the third group, which for most households is not a choice they are willing to make.

Native OIDC45 tools
OIDC via plugin6 tools
Trusted proxy header6 tools
LDAP only5 tools
Auth proxy only8 tools
Local accounts only20 tools

"Supports OIDC" is five different claims#

The phrase collapses five arrangements that deliver very different things. Sorting the index into them is most of the value here.

Native OIDC. The application is an OIDC relying party in its own code. You give it an issuer URL, a client ID and a secret, and it redirects to your provider. 45 tools are here. The good implementations also map claims to roles and let you turn off local login: Mealie has ALLOW_PASSWORD_LOGIN=false, Karakeep has DISABLE_PASSWORD_AUTH and OAUTH_AUTO_REDIRECT, Beszel has DISABLE_PASSWORD_AUTH. That is the full-fat version and it is what you should be shopping for.

Plugin OIDC. Six tools. The code is not in the core project, which means it has its own release cadence and its own bus factor. Jellyfin is the cautionary example: the LDAP plugin is official, the SSO plugin is not, and the 9p4 repository that hosted it was archived on 12 May 2026. A community fork carries it on, but if you configured the old manifest URL you simply stopped receiving updates, silently. Nextcloud is the better version of the same shape, where user_oidc is maintained in the app store but still has to survive every major upgrade.

LDAP only. Five tools, and this is where the language gets sloppiest. LDAP gives you one password everywhere. It does not give you one session. Every app still shows its own login form, you still type credentials into each one, and logging out of one logs you out of nothing else. LLDAP exists precisely to serve this group cheaply, at 15 MB idle and an ops load of 1 out of 5.

Trusted header auth. Six tools. The proxy authenticates you and injects a header such as Remote-User, and the app creates or looks up that account and logs you in. This genuinely feels like single sign-on. It is also a total compromise the moment anything can reach the application directly, because the header is just a header and anyone who can connect to the port can set it. Navidrome auto-creates users this way and the first one created becomes an admin, so an unprotected port 4533 is an admin account for whoever asks first. Every implementation ships a trust list: ND_REVERSEPROXYWHITELIST, Miniflux's TRUSTED_REVERSE_PROXY_NETWORKS, FreshRSS's trusted_sources. FreshRSS additionally auto-registers unknown users, which turns a permissive CIDR into open registration.

Forward auth only. Eight tools, and this is the category people miscount. Forward auth is a proxy decision: Caddy's forward_auth or a Traefik middleware asks Authelia whether this request may pass. If it may, the request goes through, and the application behind it has learned nothing about you and asks you to log in again. You have one authorization decision and two logins. It is worth doing for code-server, whose entire auth model is one shared password in a YAML file, and for Netdata, whose port 19999 dashboard has no login at all. It is not federation.

ToolCategoryIdentityNote
Actual BudgetProductivityNative OIDCOpenID or OAuth2 login is built in and marked preview, configured in `config.json` or the admin UI; it is also the prerequisite for multi-user.
AudiobookshelfMediaNative OIDCBuilt-in OpenID Connect with an auto-populate button that reads the provider's discovery document; no plugin needed, and the mobile apps support the OIDC flow too.
BeszelMonitoringNative OIDCPocketBase OAuth2 and OIDC providers are built in, password auth can be turned off with `DISABLE_PASSWORD_AUTH`, and `TRUSTED_AUTH_HEADER` supports forwarded auth.
BookStackDocumentsNative OIDCOIDC, SAML2 and LDAP are all first-party and configured with environment variables, including group to role sync; no plugin and no reverse proxy trickery required.
CoolifyPlatformsNative OIDCOAuth providers have been supported for some time and OpenID Connect login landed in the 4.4 release candidate; check your version before promising SSO to anyone.
ForgejoDeveloperNative OIDCOAuth2/OIDC and LDAP are built-in authentication sources in the admin UI, no plugin needed, and you can disable local registration entirely.
FreshRSSFeedsNative OIDCForm login, HTTP Basic, reverse-proxy headers (`Remote-User` or `X-WebAuth-User` from a CIDR in `trusted_sources`) and OpenID Connect are all supported in core, with auto-registration of new users on first proxy login.
GatusMonitoringNative OIDCBuilt-in OIDC under `security.oidc` with an issuer URL and an allowed-subjects list, plus basic auth as the simpler option.
GitLab CEDeveloperNative OIDCOmniAuth ships in the free self-managed build with OIDC, SAML, LDAP and social providers configured in `gitlab.rb`; LDAP group sync and multiple LDAP servers are Premium.
GiteaDeveloperNative OIDCOAuth2/OIDC and LDAP are built-in authentication sources configured from the admin panel, with optional auto-provisioning of accounts.
GotifyCommunicationNative OIDCOIDC login is built in from v3, with group claims mapped to user and admin roles and an optional auto-redirect; before v3 it was local accounts only.
GrafanaMonitoringNative OIDCGeneric OAuth2 and OIDC plus named providers (Google, GitHub, Azure AD, Okta, Keycloak) are in the free build; SAML, LDAP team sync and role-based access control are Enterprise.
HarborDeveloperNative OIDCOIDC and LDAP/AD are first-class auth backends configured in the admin UI, with OIDC group claims mapped onto Harbor project roles; switching auth mode after users exist is one-way.
HeadscaleNetworkingNative OIDCBuilt-in OIDC: point it at Authentik, Keycloak or Google and node registration goes through your IdP instead of pre-auth keys.
HedgeDocDocumentsNative OIDCGeneric OAuth2/OIDC via the `CMD_OAUTH2_*` variables plus LDAP, SAML, GitHub, GitLab and Google; local email sign-in also exists and is on by default.
HomarrDashboardsNative OIDCCredentials, OIDC and LDAP are all first-class in the box, selected through the auth provider environment variables, with per-user and per-group board permissions.
HomepageDashboardsNative OIDCv2.0 added a built-in gate (`HOMEPAGE_AUTH_ENABLED`) with either a single shared password or OIDC, but it grants access to any identity your provider authorizes for the client and applies no claim or group checks of its own.
ImmichPhotos and filesNative OIDCOIDC is built into the server with claim-based storage quota and role mapping, but local password login stays on until you explicitly disable it in admin settings.
KarakeepFeedsNative OIDCAny OIDC-compliant provider via `OAUTH_WELLKNOWN_URL`, `OAUTH_CLIENT_ID` and `OAUTH_CLIENT_SECRET`, with `DISABLE_PASSWORD_AUTH` and `OAUTH_AUTO_REDIRECT` to make it the only path; the callback is `/api/auth/callback/custom`.
KavitaMediaNative OIDCNative OpenID Connect landed in v0.8.8 and can run alongside or fully replace local accounts, including mapping provider roles to library access and age restrictions.
KeycloakIdentityNative OIDCKeycloak is the issuer, and it federates upward too: identity brokering to other OIDC and SAML providers, plus LDAP and Kerberos user federation with configurable write-back.
KomodoPlatformsNative OIDCBuilt-in OIDC plus GitHub and Google OAuth, configured through `KOMODO_OIDC_*` environment variables with PKCE support.
MattermostCommunicationNative OIDCOIDC and SAML are compiled into the binary but unlock only with a license key; from v11 Team Edition lost even GitLab SSO, so free self-hosters get local accounts.
MealieProductivityNative OIDCNative OIDC with discovery, admin and group claim mapping, and `ALLOW_PASSWORD_LOGIN=false` to hide the local login form entirely.
MinifluxFeedsNative OIDCGeneric OIDC and Google are built in via `OAUTH2_PROVIDER`, plus header-based proxy auth through `AUTH_PROXY_HEADER` (which requires `TRUSTED_REVERSE_PROXY_NETWORKS`), and WebAuthn passkeys for local accounts.
Open WebUILocal AINative OIDCGeneric OIDC and several named OAuth providers are built in, with role and group claim mapping, but `WEBUI_URL` must be set correctly first or the redirect fails.
OutlineDocumentsNative OIDCGeneric OIDC plus Google, Slack, Microsoft Entra and Discord are built in, and at least one of them is mandatory: there is no local username and password login at all.
Paperless-ngxDocumentsNative OIDCOIDC through django-allauth, configured as a JSON blob in `PAPERLESS_SOCIALACCOUNT_PROVIDERS` plus an entry in `PAPERLESS_APPS`; group sync from claims works, and a `Remote-User` header mode exists separately.
PhotoPrismPhotos and filesNative OIDCOpenID Connect login is listed as available in the free Community Edition, but the User Management web UI that makes multi-user setups pleasant is a Plus feature.
Pocket IDIdentityNative OIDCIt is the OIDC issuer, OpenID Certified, and it can sync users and groups inward from an LDAP directory. There is no SAML, no upstream social login and no password login.
PortainerPlatformsNative OIDCCE supports LDAP and generic OAuth login; Active Directory, provider templates and group-to-team mapping are Business Edition only.
Proxmox VEPlatformsNative OIDCRealms include OpenID Connect, LDAP and Active Directory natively, plus built-in TOTP and WebAuthn two-factor.
SynapseCommunicationNative OIDC`oidc_providers`, SAML2 and CAS are configured directly in homeserver.yaml, but Element's strategic path is now the separate Matrix Authentication Service.
Technitium DNS ServerNetworkingNative OIDCOpenID Connect single sign-on with scope and group-to-role mapping shipped in v15 (April 2026); before that it was local accounts only.
Trilium NotesDocumentsNative OIDCDirect OpenID Connect and TOTP support are built into the server for login; there is no multi-user model, so SSO here authenticates you, it does not partition content.
TrueNAS Community EditionPlatformsNative OIDCActive Directory and LDAP directory services, plus OIDC-based identity provider support in the recent releases for web UI login.
UnraidPlatformsNative OIDCUnraid 7.2 added optional OIDC single sign-on to the WebGUI via the built-in Unraid API; before that it was a single root password.
VaultwardenIdentityNative OIDCOIDC login is built in since 1.35.0, but a master password is still required and is not controlled by the identity provider, because it derives the vault key.
VikunjaProductivityNative OIDCBuilt-in OpenID Connect against any provider, plus LDAP added in 1.0.0; no plugin needed.
Wiki.jsDocumentsNative OIDCGeneric OpenID Connect plus a long list of first-party strategies (Azure AD, Google, GitHub, Keycloak, Auth0, LDAP, SAML), all configured in the admin UI rather than in environment variables.
Woodpecker CIDeveloperNative OIDCThere are no local accounts at all: login is OAuth against the configured forge (Forgejo, Gitea, GitHub, GitLab or Bitbucket), so your forge is your identity provider and there is no generic OIDC option.
authentikIdentityNative OIDCIt is the identity provider, and it can also federate upward: OAuth, SAML, LDAP and Kerberos sources let you chain an existing directory or social login behind it.
linkdingFeedsNative OIDC`LD_ENABLE_OIDC` turns on OpenID Connect and `LD_ENABLE_AUTH_PROXY` plus `LD_AUTH_PROXY_USERNAME_HEADER` covers Authelia-style header auth; note OIDC matches users by email address, not username.
mailcow: dockerizedCommunicationNative OIDCIdentity providers are configured in the mailcow UI itself: Keycloak, generic OIDC and LDAP, with automatic user creation on first login; mail clients still need app passwords unless you use the Mailpassword flow.
wg-easyNetworkingNative OIDCLocal admin accounts with optional TOTP by default; OAuth/OIDC external authentication landed in 15.4.0 (August 2026).
Home AssistantHome automationOIDC via pluginNo official OIDC provider; people use the HACS custom component hass-oidc-auth or an auth proxy, and the companion mobile apps handle proxy logins badly.
JellyfinMediaOIDC via pluginAn official LDAP plugin ships in the plugin catalog; OIDC comes from the third-party SSO plugin, whose original repo (9p4) was archived in May 2026 and is now carried by a community fork.
NextcloudPhotos and filesOIDC via pluginLDAP and SAML integration ship as bundled apps and OIDC comes via the maintained `user_oidc` app; all of it is app-store surface that has to survive every major upgrade.
Node-REDHome automationOIDC via plugin`adminAuth` in settings.js accepts local users or any Passport strategy, so OAuth2 and OIDC work through an installed strategy module rather than a built-in provider.
SeafilePhotos and filesOIDC via pluginOAuth/OIDC and basic LDAP are configurable in the Community Edition; SAML, ADFS, Shibboleth and LDAP group sync are Professional Edition features.
WazuhSecurityOIDC via pluginSAML single sign-on to the dashboard through the indexer's security plugin, with documented setups for Entra ID, Okta, Keycloak and authentik; the docs cover SAML rather than OIDC.
DozzleMonitoringTrusted proxy headerEither a bcrypt `users.yml` file for local accounts, or forward-proxy mode trusting `Remote-User`, `Remote-Email` and `Remote-Name` from Authelia, oauth2-proxy or Cloudflare Access. No native OIDC.
File BrowserPhotos and filesTrusted proxy headerAuthentication is local JSON accounts, a proxy header method that trusts an upstream-injected username, a command hook, or no auth at all; there is no OIDC and sessions are unrevocable JWTs.
Firefly IIIProductivityTrusted proxy header`AUTHENTICATION_GUARD=remote_user_guard` trusts a proxy-injected header (`REMOTE_USER` by default) for Authelia and similar; LDAP support was dropped and there is no built-in OIDC.
FrigateHome automationTrusted proxy headerBuilt-in users with PBKDF2 hashing, or disable that and trust `X-Forwarded-User` and `X-Forwarded-Groups` from Authelia or Authentik in front.
NavidromeMediaTrusted proxy headerReverse proxy authentication via ND_REVERSEPROXYUSERHEADER (default Remote-User) with an ND_REVERSEPROXYWHITELIST CIDR; there is no native OIDC, and Subsonic clients still authenticate with a Navidrome password regardless.
grocyProductivityTrusted proxy header`AUTH_CLASS` swaps the auth middleware: local users by default, `ReverseProxyAuthMiddleware` reading a `REMOTE_USER` header, or `LdapAuthMiddleware`. No OIDC.
AutheliaIdentityLDAP onlyAuthelia is the identity provider; its own user source is a YAML file of Argon2id hashes or an LDAP directory, and it cannot federate up to an external OIDC or social provider.
Calibre-WebMediaLDAP onlyLDAP works, plus OAuth against GitHub and Google specifically, plus a reverse proxy header login mode; there is no general OIDC, so most people use forward auth and enable the proxy header option.
EmbyMediaLDAP onlyAn LDAP plugin exists and works; there is no first-party OIDC, so anything IdP-shaped means a forward-auth proxy in front of the web UI, which native clients then bypass.
LLDAPIdentityLDAP onlyIt is the LDAP server and nothing else. No OIDC in either direction, so by itself it gives you one password everywhere, not one session.
StalwartCommunicationLDAP onlyCommunity authenticates against an internal directory, LDAP/Active Directory or SQL; signing in through a third-party OIDC provider such as Keycloak or Authentik is an Enterprise feature.
ESPHomeHome automationAuth proxy onlyThe Device Builder dashboard has no user model of its own; as a Home Assistant app it inherits ingress auth, standalone it needs a proxy in front.
JellyseerrMediaAuth proxy onlyLogin delegates to your media server's accounts (Jellyfin, Emby or Plex) plus local users; native OpenID Connect is still only in a preview branch rather than a stable release, so IdP integration means forward auth in front.
NetdataMonitoringAuth proxy onlyThe local agent dashboard has no login of its own; identity comes either from signing in to Netdata Cloud or from an authenticating proxy you put in front of 19999.
PrometheusMonitoringAuth proxy onlyNo user accounts at all. Basic auth and TLS can be set in `web.config.yml`; anything with identity in it means an auth proxy in front.
ScrutinyMonitoringAuth proxy onlyThere is no login at all on the web UI or the API, so anything resembling access control has to be an authenticating proxy in front of port 8080.
TraefikNetworkingAuth proxy onlyNo user accounts. The dashboard is unauthenticated unless you put a BasicAuth or ForwardAuth middleware in front of it, which is also how you bolt Authelia onto backends.
code-serverDeveloperAuth proxy onlyAuthentication is a single shared password in `~/.config/code-server/config.yaml`; there are no user accounts, so anything more than one person means an auth proxy in front.
wallabagFeedsAuth proxy onlyLocal accounts with optional two-factor by email or TOTP; there is no OIDC and no supported LDAP in core, so SSO means an auth proxy in front and a matching local user.
AdGuard HomeNetworkingLocal accounts onlyLocal users defined in AdGuardHome.yaml with bcrypt hashes, served over HTTP basic auth. No OIDC, no LDAP, no plugin path.
CasaOSPlatformsLocal accounts onlyA single local account created at first boot, no LDAP, no OIDC, and no meaningful multi-user model.
DocmostDocumentsLocal accounts onlyThe community edition has local accounts only; SAML 2.0, OIDC, LDAP, MFA and SCIM are all gated behind the paid Business or Enterprise tier and require a licence key.
DokployPlatformsLocal accounts onlyLocal accounts with two-factor and invitations; there is no OIDC login for the dashboard itself.
DuplicatiBackupLocal accounts onlyLocal password only, mandatory since 2.1.0. Proxy setups are supported through `DUPLICATI__WEBSERVICE_PRE_AUTH_TOKENS`, but there is no OIDC or LDAP.
GlanceDashboardsLocal accounts onlyLocal users only, defined in the `auth` block of the config with bcrypt hashes; there is no OIDC, no LDAP and no header trust, so put an auth proxy in front if you need real identity.
KopiaBackupLocal accounts only`kopia server` has its own username and password list plus optional TLS client certificates. There is no OIDC or LDAP; put it behind an authenticating proxy if you need identity.
MinIOBackupLocal accounts onlyExternal identity via OIDC and LDAP was removed from the community build in RELEASE.2025-05-24 and moved into the commercial product. What is left is local access keys and policies.
Nginx Proxy ManagerNetworkingLocal accounts onlyLocal accounts only, with per-user permissions and an audit log. No OIDC, no LDAP, and none is planned in the v2 line.
PLANKAProductivityLocal accounts onlyOIDC existed in the community edition until 2.2.0 removed it to PLANKA Pro; local accounts with optional TOTP are what remains.
Pi-holeNetworkingLocal accounts onlyA single web password with optional TOTP, plus generated application passwords for scripts. No user accounts, no OIDC, no LDAP.
Plex Media ServerMediaLocal accounts onlyIdentity belongs to plex.tv: accounts, sharing and login all route through Plex's cloud, there is no way to point it at your own IdP, and managed users under Plex Home are the closest thing to a local account.
ProwlarrMediaLocal accounts onlyLocal forms or basic login only, with no LDAP or OIDC; the API key is the real credential, and it is the one the *arr apps use, so treat it like a shared secret.
RadarrMediaLocal accounts onlyLocal forms login only; v6 removed basic auth entirely, there is no LDAP or OIDC, and the API key bypasses the UI login for anything holding it.
SonarrMediaLocal accounts onlyForms or basic login against a local user only, mandatory since v4; there is no LDAP or OIDC, so SSO means a forward auth proxy, and the API key bypasses it entirely for any client that has it.
SyncthingPhotos and filesLocal accounts onlyThe web GUI has a single local username and password and no identity integration; if you expose it, put an authenticating proxy in front of 8384.
Uptime KumaMonitoringLocal accounts onlyLocal accounts with optional TOTP only; the OAuth support in the codebase authenticates monitored endpoints, not people logging in.
Zigbee2MQTTHome automationLocal accounts onlyThe frontend has one shared `auth_token` in configuration.yaml, no user accounts and no OIDC, so put a proxy in front if it leaves your LAN.
n8nDashboardsLocal accounts onlyThe self-hosted community build has local accounts only: SAML, OIDC and LDAP are all gated behind an Enterprise plan, so free self-hosters put an auth proxy in front or live with n8n's own user table.
ntfyCommunicationLocal accounts onlyLocal users and per-topic ACLs managed with `ntfy access`; there is no OIDC or LDAP, so put an auth proxy in front of the web app if you need single sign-on.

The recent arrivals, the retreats, and the never#

Three movements are visible in the data, and they point in different directions.

OIDC arrived recently in a cluster of infrastructure tools that spent years with a single admin password. Technitium DNS Server shipped OIDC with scope and group-to-role mapping in v15 in April 2026. Unraid added it to the WebGUI in 7.2 through its built-in API. wg-easy got OAuth and OIDC in 15.4.0 in August 2026. Kavita landed native OIDC in v0.8.8 with role mapping onto library access. Vaultwarden has had it since 1.35.0. If your mental model of self-hosted SSO is from 2023, it is out of date in your favor.

The retreats went the other way and cost people real work. PLANKA 2.2.0 removed OIDC to PLANKA Pro and deactivated every SSO-created user, because those accounts had no password to fall back on. Recovery is an admin setting a password for each one and reactivating them individually. MinIO removed LDAP and OIDC from the community build in the May 2025 release and moved them into the commercial product, in the same release that took away the console. Mattermost Team Edition lost GitLab SSO, its only method, in v11. Docmost gates SAML, OIDC and LDAP behind a Business tier at 6 dollars per seat per month with a ten seat minimum. n8n does the same under an Enterprise plan. Stalwart Community will act as an OIDC provider but will not accept logins from one without an Enterprise license.

And some will never have it, for structural reasons rather than neglect. Plex cannot federate because identity is plex.tv by design. Sonarr, Radarr and Prowlarr have forms login and an API key that bypasses it entirely for anything holding it, so the login is not really the credential. Pi-hole and AdGuard Home have one web password because they are resolvers, not multi-user applications. Nginx Proxy Manager has no plans for it in the v2 line. Syncthing, Zigbee2MQTT and Glance are all single-secret designs. Waiting for these is not a plan.

What to actually do with this distribution#

Run a small provider, not a large one. Given that 56.7 percent of the apps with accounts can consume OIDC, the provider's job is mostly issuing tokens, and the cheap options do that well. Pocket ID is 30 MB idle, ops load 1, passkey-only and OpenID Certified. Authelia is 35 MB and gives you forward auth in the same process, which matters because you will need it. authentik is a genuinely capable IdP and costs about 1 GB of RAM and an ops load of 4 out of 5; pick it when you actually need SAML, an LDAP outpost or upstream federation, not by default. Keycloak is 750 MB and an upgrade path with real cliffs in it. The head to head reading is Pocket ID vs Authelia and Authelia vs authentik.

Then accept the split. Federate everything that can federate. Put forward auth in front of the handful that cannot, and accept the second login there. Add LLDAP if you have two or three LDAP-only holdouts worth keeping. This is a three-container identity layer under 100 MB, and it is the honest answer for a household.

The network path matters as much as the config. Header auth and forward auth are both only as strong as the guarantee that the app is unreachable except through the proxy. That means not publishing the container port at all, putting the app on an internal Docker network with only the proxy attached, and remembering that published ports bypass UFW because Docker writes its own iptables chains. Reverse proxy and TLS covers the proxy side and A security baseline for a home server covers the host side.

One more failure mode worth designing against: Outline has no local accounts at all, ever. If your provider's certificate expires or its container fails to start, nobody can get into Outline to fix anything. A single provider is a single point of failure for your entire estate, so keep a break-glass path: a local admin account on the apps that allow one, and a tested restore of the provider's own database.

Next step#

Run your own list against the our methodology definitions and count how many of your apps land in the none and proxy-only rows of the table above. If the answer is more than three, your first move is not installing an identity provider, it is deciding which of those three you are willing to replace. Single sign-on for self-hosters walks the actual setup, and Stack planner will show you the identity load of a stack before you build it.

Questions#

Is forward auth the same as single sign-on?

No. Forward auth gates the HTTP request at the proxy: the proxy asks your identity provider who you are, and if it approves, the request is passed through. The application behind it never learns who you are, so it shows you its own login form as well. You get one authorization decision and two logins. It is a real security control and a poor identity experience, which is why the distinction matters when you are counting which of your apps are actually federated.

Which self-hosted identity provider should I run?

Start with Pocket ID if every app you care about speaks OIDC: it is one Go binary, about 30 MB idle, passkey-only, and there is very little to operate. Choose Authelia if you also need forward auth for apps that cannot federate, since it does both from one config file at around 35 MB. Choose authentik only if you specifically need SAML, an LDAP outpost or user federation, and accept roughly 1 GB of RAM and an ops load of 4 out of 5 for it.

Is proxy header authentication safe?

Only if nothing can reach the application except through the proxy. Header auth means the app trusts a header such as Remote-User and logs that person in with no password. If the container port is published on the LAN, anyone who can reach it sets the header and becomes any user, including the admin. Every app that supports it also ships a trust list for exactly this reason: Navidrome's ND_REVERSEPROXYWHITELIST, Miniflux's TRUSTED_REVERSE_PROXY_NETWORKS, FreshRSS's trusted_sources. Set it, and stop publishing the port.

Does OIDC support mean I can turn off local passwords?

Not always, and this is the most common disappointment. Immich keeps password login enabled until you explicitly disable it in admin settings. Vaultwarden supports OIDC since 1.35.0 but still requires a master password, because that password derives your vault key and the identity provider cannot hold it. Jellyfin's SSO plugin only covers the web UI, so native clients keep authenticating against Jellyfin's own user table. Check whether the local login can actually be disabled before you call an app federated.

What happens when a project moves OIDC behind a paywall?

You find out on upgrade, usually badly. PLANKA 2.2.0 moved OIDC to PLANKA Pro and deactivated every SSO-created user in the process, because those accounts had no password to fall back on; an admin has to set a password and reactivate each one by hand. MinIO removed LDAP and OIDC from the community build in the May 2025 release. Mattermost Team Edition lost its last SSO method in v11. Read breaking changes before pulling a tag on anything that holds your logins.

How many logins should a household realistically expect?

Two. One at your identity provider, which covers the 51 apps that federate, and one more shared between whichever holdouts you actually use, typically a media server and a couple of *arr apps whose API keys matter more than their passwords anyway. Trying to get to exactly one login usually means either running an app you like less or putting header auth on something that is reachable directly, which trades a small annoyance for a real vulnerability.

Sources#

Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.