| templates | ||
| .gitignore | ||
| app.py | ||
| docker-compose.yaml | ||
| Dockerfile | ||
| README.md | ||
| requirements.txt | ||
PeerTube Discord OIDC Bridge
A lightweight, containerized OIDC (OpenID Connect) provider that acts as a bridge between a PeerTube instance and Discord's OAuth2 authentication. This allows users to log in or register on a PeerTube instance using their Discord account, with access gated by membership in a specific Discord server.
Overview
This project solves a specific problem: PeerTube has a robust, official plugin for OIDC authentication, but not for generic OAuth2 providers like Discord. This service fills that gap by presenting a fully compliant OIDC interface to PeerTube while handling the Discord OAuth2 flow on the backend.
The primary use case is for self-hosted PeerTube instances that are not fully public but need a simple way to grant access to a community of users, such as friends or server members, without manual account creation.
Features
- Discord Authentication: Enables "Login with Discord" for any PeerTube instance.
- Server Gating: Restricts login/registration to members of a specific Discord server.
- OIDC Compliant: Works seamlessly with the official PeerTube
auth-openid-connectplugin. - Automatic Account Creation: New users who pass the server gate are automatically given a PeerTube account.
- Existing Account Linking: Users with an existing PeerTube account can link it by matching their Discord email.
- Dockerized: Runs as a single, lightweight Docker container orchestrated with Docker Compose.
- Diagnostics Page: Includes a
/statuspage to check configuration and connectivity.
How It Works
- A user on PeerTube clicks "Login with OpenID Connect".
- PeerTube redirects the user to this OIDC Bridge service.
- The OIDC Bridge service redirects the user to Discord for authentication and authorization.
- The user authorizes the application in Discord and is redirected back to the bridge.
- The bridge uses the Discord authorization code to get an access token.
- It then uses the access token to fetch the user's profile and their list of Discord servers (guilds).
- The bridge creates a signed ID Token (JWT), inserting the user's server IDs into a
groupsclaim. - PeerTube receives the ID Token, validates it, and checks if the user's
groupsclaim contains the required "Allowed Group" (your Discord Server ID). - If the check passes, the user is logged in or their account is created.
Requirements
- Docker
- Docker Compose
- A PeerTube instance with the
auth-openid-connectplugin installed and enabled.
Setup Instructions
1. Clone or Create Project Files
Place all the project files (docker-compose.yml, Dockerfile, app.py, requirements.txt, .env, templates/status.html) in a single directory on your server.
2. Configure Environment Variables
Create a .env file by copying the contents from the Canvas and fill in the following values:
OIDC_PROVIDER_URL: The full, publicly accessible URL of this bridge service (e.g.,http://your-domain.com:5000orhttp://192.168.1.10:5000). This cannot belocalhostif PeerTube is running on a different machine or in a different Docker network.DISCORD_CLIENT_ID: Your Client ID from the Discord Developer Portal.DISCORD_CLIENT_SECRET: Your Client Secret from the Discord Developer Portal.PEERTUBE_CALLBACK_URL: The full callback URL provided by the PeerTube OIDC plugin settings page. It will look likehttps://your-peertube.com/plugins/auth-openid-connect/router/code-cb.
3. Configure Discord Application
In the Discord Developer Portal, under your application's "OAuth2" settings:
- Add a Redirect URI that matches the bridge's callback endpoint:
http://<your-domain-or-ip>:5000/discord/callback.
4. Configure PeerTube Plugin
On your PeerTube instance, navigate to Administration -> Plugins/Themes -> auth-openid-connect -> Settings and configure it as follows:
- Discover URL:
http://<your-domain-or-ip>:5000/.well-known/openid-configuration - Client ID:
peertube - Client secret:
peertube-super-secret - Scope:
openid email profile groups - Username property:
preferred_username - Email property:
email - Display name property:
name - Group property:
groups - Allowed group: Your specific Discord Server ID.
Running the Service
From the project directory, run the following command:
docker-compose up --build -d
The -d flag runs the container in detached mode (in the background). Troubleshooting
You can check the health and configuration of the bridge service by navigating to its status page:
http://:5000/status
This page will show the status of environment variables, connectivity to the Discord API, and a log of the most recent incoming requests from your PeerTube instance, which is invaluable for debugging the connection.
To view live logs from the container, run:
docker-compose logs -f