Jellyfin OIDC Plugin Setup 2026: SSO with Authelia & Authentik
How to Enable OIDC (OpenID Connect) in Jellyfin
Jellyfin supports OIDC-based single sign-on through the jellyfin-plugin-sso community plugin. Once configured, your users authenticate via an external identity provider (Authelia, Authentik, Keycloak, or any OIDC-compliant IdP) and access Jellyfin without a separate password. This guide covers the full OIDC setup with both Authelia (lightweight) and Authentik (full-featured).
Jellyfin SSO with Authelia and Authentik (2026)
If you run Jellyfin alongside Radarr, Sonarr, Jellyseerr, Grafana, and other services, your users (and you) are juggling multiple passwords. Single Sign-On (SSO) lets everyone log in once and access everything.
This guide covers the two most popular self-hosted SSO solutions for Jellyfin in 2026.
What Is SSO and Why Does It Matter?
Single Sign-On means one login for all your services:
- Log in to Authelia/Authentik once
- Access Jellyfin, Jellyseerr, Radarr, Sonarr, Grafana - no re-authentication
- Centralized user management - add/remove users in one place
- Two-factor authentication (2FA) across all services
- Audit logs for every login attempt
Option 1: Authelia (Lightweight)
Authelia is a lightweight authentication server that sits behind your reverse proxy.
How it works
User → Reverse Proxy → Authelia (login) → Jellyfin
Authelia intercepts requests, checks authentication, and forwards authenticated users to the target service.
Docker Compose
services:
authelia:
image: authelia/authelia:latest
volumes:
- ./authelia/config:/config
ports:
- 9091:9091
restart: unless-stopped
Authelia configuration for Jellyfin
# configuration.yml
access_control:
default_policy: deny
rules:
- domain: jellyfin.yourdomain.com
policy: one_factor
- domain: radarr.yourdomain.com
policy: two_factor
- domain: sonarr.yourdomain.com
policy: two_factor
identity_providers:
oidc:
clients:
- id: jellyfin
description: Jellyfin Media Server
secret: your_client_secret_here
redirect_uris:
- https://jellyfin.yourdomain.com/sso/OID/redirect/authelia
scopes:
- openid
- profile
- groups
Jellyfin SSO Plugin
- Install the jellyfin-plugin-sso from the plugin catalog
- Configure OIDC provider:
- Provider name: Authelia
- OIDC endpoint:
https://auth.yourdomain.com - Client ID:
jellyfin - Client Secret: your secret
- Users see a "Sign in with Authelia" button on the Jellyfin login page
Option 2: Authentik (Full-Featured)
Authentik is a more feature-rich identity provider with a polished admin UI, LDAP support, and advanced policies.
Docker Compose
services:
authentik-server:
image: ghcr.io/goauthentik/server:latest
command: server
environment:
- AUTHENTIK_SECRET_KEY=your_secret_key
- AUTHENTIK_REDIS__HOST=redis
- AUTHENTIK_POSTGRESQL__HOST=postgresql
- AUTHENTIK_POSTGRESQL__USER=authentik
- AUTHENTIK_POSTGRESQL__PASSWORD=authentik_db_pass
- AUTHENTIK_POSTGRESQL__NAME=authentik
ports:
- 9000:9000
- 9443:9443
restart: unless-stopped
authentik-worker:
image: ghcr.io/goauthentik/server:latest
command: worker
environment:
- AUTHENTIK_SECRET_KEY=your_secret_key
- AUTHENTIK_REDIS__HOST=redis
- AUTHENTIK_POSTGRESQL__HOST=postgresql
- AUTHENTIK_POSTGRESQL__USER=authentik
- AUTHENTIK_POSTGRESQL__PASSWORD=authentik_db_pass
- AUTHENTIK_POSTGRESQL__NAME=authentik
restart: unless-stopped
redis:
image: redis:alpine
restart: unless-stopped
postgresql:
image: postgres:16-alpine
environment:
- POSTGRES_USER=authentik
- POSTGRES_PASSWORD=authentik_db_pass
- POSTGRES_DB=authentik
volumes:
- ./authentik/db:/var/lib/postgresql/data
restart: unless-stopped
Configure Authentik for Jellyfin
- Open Authentik admin UI at
https://your-server:9000/if/admin/ - Applications → Create Application → Name: "Jellyfin"
- Create an OAuth2/OIDC Provider:
- Client ID: auto-generated
- Redirect URI:
https://jellyfin.yourdomain.com/sso/OID/redirect/authentik - Scopes: openid, profile, email
- Install jellyfin-plugin-sso and configure with Authentik endpoints
Authentik advantages over Authelia
| Feature | Authelia | Authentik |
|---|---|---|
| Setup complexity | Simple | Medium |
| Admin UI | YAML config | Full web UI |
| LDAP support | Basic | Full |
| User self-service | Limited | Password reset, profile |
| Group management | File-based | Web UI |
| Audit logs | Basic | Detailed |
| Resource usage | Very low | Medium (PostgreSQL + Redis) |
Protecting Your Entire Stack
Once SSO is configured, protect all services:
| Service | SSO method |
|---|---|
| Jellyfin | OIDC plugin |
| Jellyseerr | OIDC in preview branch only (not in stable) |
| Radarr | Reverse proxy auth header |
| Sonarr | Reverse proxy auth header |
| Grafana | Built-in OAuth2 |
| Portainer | Built-in OAuth2 |
For services without native OIDC (Radarr, Sonarr), use your reverse proxy to enforce authentication via Authelia/Authentik before forwarding requests.
Heads-up on Jellyseerr / Seerr OIDC: As of 2026, OpenID Connect is not available in the stable Jellyseerr/Seerr image (the
:latesttag, including Seerr 3.2.0). It only lives in a work-in-progress preview branch - historically taggedfallenbagel/jellyseerr:preview-OIDC, renamedpreview-new-oidcafter the Overseerr and Jellyseerr projects merged into Seerr. The feature is still unmerged and incomplete: notably there is no automatic account linking yet, so migrating existing local users can fail with aUNIQUE constraint failed: user.emailerror. Until OIDC ships in a stable release, either run the preview image or front Jellyseerr with reverse-proxy / forward-auth via Authelia or Authentik.
Two-Factor Authentication (2FA)
Both Authelia and Authentik support 2FA:
- TOTP (Google Authenticator, Authy)
- WebAuthn (hardware keys like YubiKey)
- Push notifications (Authentik only)
Enable 2FA for admin accounts at minimum. Consider requiring it for all users accessing services remotely.
FAQ
Does SSO replace Jellyfin user accounts? No. SSO creates a link between the external identity and a Jellyfin user. Jellyfin still manages its own user database.
Can I use SSO for the Jellyfin mobile app? The SSO plugin works with the web interface. Mobile app support depends on the client - some support OIDC redirect, others require direct Jellyfin credentials.
Is Authelia or Authentik better? Authelia for simplicity and low resource usage. Authentik for a full-featured identity platform with a web admin UI.
Does Jellyseerr support OIDC out of the box? Not in the stable release. OpenID Connect for Jellyseerr/Seerr is still a preview feature — you must run the preview-new-oidc image (formerly preview-OIDC). It is not in :latest or Seerr 3.2.0, and there is no automatic account linking yet, so existing users may need to be linked manually in the admin panel or you should disable "New user login" to avoid duplicate-account errors.
Can JellyWatch connect through SSO? JellyWatch connects directly to the Jellyfin API using standard credentials. SSO is primarily for web-based access.
Secure your entire media stack - then monitor it from your pocket. Download JellyWatch on Google Play - session monitoring, server health, and push alerts for your Jellyfin server on Android.
On Emby? Download EmbyWatch on Google Play - the same monitoring experience for Emby servers.




Comments 5
Authentik with Jellyfin SSO plugin works beautifully. One login for Jellyfin, Jellyseerr, Grafana, and Portainer. No more password fatigue.
Authelia is perfect for smaller setups. YAML config, low resource usage, and 2FA with YubiKey. Simple and secure.
WebAuthn with my YubiKey through Authentik is the most satisfying login experience. Tap the key, done. No TOTP codes to type. Highly recommend for admin accounts.
Jellyseerr / the seerr image does not support OIDC under its latest tagged version. Did you all use the preview feature branch?
You're absolutely right, thanks for flagging it. OIDC was never merged into a stable Seerr/Jellyseerr release, not even in 3.2.0. It only lives in the preview branch. We tested this setup on the fallenbagel/jellyseerr:preview-OIDC image (now renamed preview-new-oidc since the Overseerr + Jellyseerr â Seerr merge). If you're on :latest, you won't have OIDC.
Heads-up if you migrate existing users: there's no automatic account linking yet, so logins can fail with a UNIQUE constraint failed: user.email error. In that case, you either link accounts manually in the admin panel or disable "New user login."
We'll update the article to make the preview-branch requirement explicit.
Would you like me to read the actual article from the database (table blog) to identify the relevant passage?
Leave a comment