website/integrations/media/jellyfin/index.md
Jellyfin is a free and open source media management and streaming platform for movies, TV shows, and music.
:::info Jellyfin does not have any native external authentication support as of the writing of this page. Currently, there are two plugins for Jellyfin that provide external authentication, an OIDC plugin and an LDAP plugin. :::
:::caution An LDAP outpost must be deployed to use the Jellyfin LDAP plugin. :::
The following placeholders are used in this guide:
jellyfin.company is the FQDN of the Jellyfin installation.authentik.company is the FQDN of the authentik installation.ldap.company is the FQDN of the LDAP outpost.dc=company,dc=com is the Base DN of the LDAP outpost.ldap_bind_user is the username of the desired LDAP Bind User.:::info This documentation lists only the settings that you need to change from their default values. Be aware that any changes other than those explicitly mentioned in this guide could cause issues accessing your application. :::
No additional authentik configuration is required. Follow the LDAP outpost instructions to create an LDAP outpost and configure access through it.
LDAP Server: ldap.companyLDAP Port: 636Secure LDAP: CheckedStartTLS: UncheckedSkip SSL/TLS Verification:
Allow password change: Unchecked
Password Reset URL: EmptyLDAP Bind User: Set this to a user you want to bind to in authentik. By default, the path will be ou=users,dc=company,dc=com so the LDAP Bind user will be cn=ldap_bind_user,ou=users,dc=company,dc=com.LDAP Bind User Password: The Password of the user. If using a Service account, this is the token.LDAP Base DN for Searches: the base DN for LDAP queries. To query all users, set this to dc=company,dc=com.
At this point, click Save and Test LDAP Server Settings. If the settings are correct, you will see:
Connect(Success); Bind(Success); Base Search (Found XY Entities)
LDAP User Filter: This is used to apply a user filter on which users are allowed to log in. This must be set
(objectClass=user)(memberOf=cn=jellyfin_users,ou=groups,dc=company,dc=com)LDAP Admin Base DN: All the users in this DN are automatically set as admins.
LDAP Admin Filter: Similar to the user filter, but every matched user is set as admin.
At this point, click Save and Test LDAP Filter Settings. If the settings are correct, you will see:
Found X user(s), Y admin(s)
LDAP Attributes: uid, cn, mail, displayNameEnable case Insensitive Username: CheckedAt this point, enter a username and click Save Search Attribute Settings and Query User. If the settings are correct, you will see:
Found User: cn=test,ou=users,dc=company,dc=com
Enabled User Creation: CheckedLDAP Name Attribute: cnLDAP Password Attribute: userPasswordLibrary Access: Set this according to desired library accessProvider Settings
In authentik under Providers, create an OAuth2/OpenID Provider with these settings:
jellyfinhttps://jellyfin.company/sso/OID/redirect/authentikEverything else is up to you, just make sure to grab the client ID and the client secret!
:::info The last part of the URI is the name you use when making the provider in Jellyfin so make sure they are the same. :::
Application Settings
Create an application that uses jellyfin provider. Optionally apply access restrictions to the application.
Set the launch URL to https://jellyfin.company/sso/OID/start/authentik
https://raw.githubusercontent.com/9p4/jellyfin-plugin-sso/manifest-release/manifest.json
Click the Catalog tab on top and install the SSO-Auth with the most recent version.
Restart the Jellyfin server.
Go back to the plugin tab.
Click the SSO-Auth plugin.
Fill out the Add / Update Provider Configuration:
authentikhttps://authentik.company/application/o/jellyfin/.well-known/openid-configurationIf you want to use the role claim then also fill out these:
groupsHit Save at the bottom.
On the left side now click the General under dashboard and go to Branding.
In the login disclaimer, put this code and make sure to change the URL at the top:
<form action="https://jellyfin.company/sso/OID/start/authentik">
<button class="raised block emby-button button-submit">
Sign in with SSO
</button>
</form>
a.raised.emby-button {
padding:0.9em 1em;
color: inherit !important;
}
.disclaimerContainer{
display: block;
}
:::info
If you have problems, check your logs under Administration > Dashboard > "logs". They will most likely be near the bottom with Jellyfin.Plugin.SSO_Auth. at the start of the lines you are looking for.
:::