I’ve created a module with the goal of tightly integrating authentication for Discord based identities.
Download binary via GitHub releases, or build with
xcaddy build --with github.com/enum-gg/caddy-discord
caddydiscord
http.authentication.providers.discord
http.handler.discord
With v1.0.0 it is possible to authenticate routes based on either (or combination of):
- User ID
- Guild Membership (ie. User is in Server)
- Role ID (ie. User has specific role in Guild)
Discord OAuth App is required (no bot is required).
I’m using this in production for a gaming community and it’s been smooth sailing but given it is a version 1.0.0 release and has only been tested by me, I wouldn’t recommend it for high throughput just yet.
Example Usage
Summary
{
discord {
client_id 1000000000000000000 # Discord app OAuth client ID
client_secret 8CEPZZZZZAfl_w19ZZZZW_k # Discord app OAuth secret
redirect http://localhost:8080/discord/callback # Route you've configured with `discordauth callback`
realm clique {
guild 106307051119907 {
role 10630111112755034
}
}
}
}
http://localhost:8080 {
route /discord/callback {
# Desigate route as OAuth callback endpoint
discord callback
}
route /discordians-only {
# Only allow discord users that auth against 'clique' realm
protect using clique
respond "Hello {http.auth.user.username}!<br /><br /><img src='https://cdn.discordapp.com/avatars/{http.auth.user.id}/{http.auth.user.avatar}?size=4096.png'> "
}
respond "Hello, world!"
}