AuthPortal is a lightweight, self-hosted authentication gateway built for Plex, Jellyfin, and Emby ecosystems. It provides a unified login experience for media-based communities and home-lab environments, issuing secure signed sessions for intranet portals and apps.
AuthPortal authenticates users directly against connected media-server accounts, seals server tokens for reuse, and manages session lifecycle through HTTP-only cookies. Authorized users land on their personalized home page, while unrecognized users get a restricted guest experience.
Important
**Use at your own risk.** This project leans on Vibe Coding practices - AI pair-programming, automated refactors, and rapid iteration. Treat releases as starting points - test, monitor, and adapt to your stack. AuthPortal remains an independent effort with no endorsement from Plex, Emby, or Jellyfin.
RBAC is now built in: AuthPortal now includes database-backed roles, permissions, user-role bindings, and permission-aware admin/API enforcement.
Access Control tab: operators can create custom roles and permissions, assign permissions to roles, and manage user-role bindings from the admin console.
Permission-aware app entitlements: App Settings service buttons can be gated by custom permissions, and downstream OAuth/OIDC clients can request those same permissions as scopes.
Built-in LDAP Sync: the old standalone LDAP sync workflow is replaced by a first-class LDAP Sync admin tab with persisted config, manual runs, and scheduling.
LDAP group-to-role mapping: optional group synchronization can grant or revoke RBAC roles during sync.
Dedicated Logs tab: admin audit history is now consolidated into one place with filters, sorting, and a live application log stream.
Expanded audit coverage: config, OAuth, Access Control, backups, and LDAP Sync actions now emit persistent server-side audit records.
Container hardening: updated builder/runtime images and removed the explicit shipped openssl layer to address the CVE-2026-2673 scan finding.