6.0 KiB
OAuth/OIDC Client Setup Guide
This guide covers setting up OAuth/OIDC authentication for services like Portainer and Gitea using Authelia as the identity provider.
🔧 Overview
Authelia provides OpenID Connect (OIDC) support, allowing services to authenticate users through OAuth flows instead of using Traefik middleware. This provides better integration and user experience.
🔑 Client Secrets Management
Generate Client Secrets
# Generate secrets for new OAuth clients
./scripts/generate-oauth-secrets.sh
This script creates:
secrets/oauth-secrets.env
- Environment variables for local testing- Individual secret files in
secrets/clients/
directory - All files are automatically gitignored
Required CI/CD Vault Secrets
Add these to your Woodpecker CI vault:
Portainer OAuth
- Variable:
CLIENT_SECRET_PORTAINER
- Value: Generated from
secrets/clients/portainer-secret.txt
Gitea OAuth
- Variable:
CLIENT_SECRET_GITEA
- Value: Generated from
secrets/clients/gitea-secret.txt
📱 Client Configurations
Portainer OAuth Setup
1. Authelia Configuration
Already configured in docker/authelia/config/configuration.oidc.clients.yml
:
- client_id: portainer
client_name: Portainer
client_secret: {{ secret "/run/secrets/CLIENT_SECRET_PORTAINER" }}
public: false
authorization_policy: one_factor
consent_mode: implicit
scopes:
- openid
- email
- profile
- groups
redirect_uris:
- https://portainer.{{ env "TRAEFIK_DOMAIN" }}/
userinfo_signed_response_alg: none
2. Portainer OAuth Settings
Configure in Portainer → Settings → Authentication:
- OAuth Provider: Custom
- Client ID:
portainer
- Client Secret:
<from CI vault>
- Authorization URL:
https://login.nixc.us/api/oidc/authorization
- Token URL:
https://login.nixc.us/api/oidc/token
- User Info URL:
https://login.nixc.us/api/oidc/userinfo
- Scopes:
openid email profile groups
- Redirect URL:
https://portainer.nixc.us/
3. Remove Traefik Middleware (Optional)
Once OAuth is working, remove middleware protection:
# Remove this line from Portainer service:
# traefik.http.routers.portainer.middlewares: authelia_authelia
Gitea OAuth Setup
1. Authelia Configuration
Already configured in docker/authelia/config/configuration.oidc.clients.yml
:
- client_id: gitea
client_name: Gitea
client_secret: {{ secret "/run/secrets/CLIENT_SECRET_GITEA" }}
public: false
authorization_policy: one_factor
consent_mode: implicit
scopes:
- openid
- email
- profile
- groups
redirect_uris:
- https://git.{{ env "TRAEFIK_DOMAIN" }}/user/oauth2/authelia/callback
userinfo_signed_response_alg: none
2. Gitea OAuth Settings
Configure in Gitea → Site Administration → Authentication Sources:
- Authentication Type: OAuth2
- Authentication Name:
Authelia
- OAuth2 Provider: OpenID Connect
- Client ID:
gitea
- Client Secret:
<from CI vault>
- OpenID Connect Auto Discovery URL:
https://login.nixc.us/.well-known/openid_configuration
- Icon URL:
https://login.nixc.us/static/media/logo.png
(optional)
🔄 Deployment Process
1. Generate Secrets
./scripts/generate-oauth-secrets.sh
2. Update CI/CD Vault
Add the generated secrets to your Woodpecker CI vault:
CLIENT_SECRET_PORTAINER
CLIENT_SECRET_GITEA
3. Deploy Authelia
Push changes to trigger CI/CD deployment with new OAuth clients.
4. Configure Services
Set up OAuth in each service's admin interface using the URLs and client IDs above.
🔍 Testing OAuth Flow
Test Authentication Flow
- Visit protected service (e.g.,
https://portainer.nixc.us
) - Click OAuth login button
- Redirect to Authelia (
https://login.nixc.us
) - Authenticate with your credentials
- Redirect back to service with authentication
- Access granted with user information
Troubleshooting
- Check redirect URIs match exactly (including trailing slashes)
- Verify client secrets in CI vault match generated values
- Confirm Authelia is accessible at
https://login.nixc.us
- Check service logs for OAuth-specific error messages
🛡️ Security Considerations
Client Secrets
- Never commit client secrets to git (automatically gitignored)
- Rotate secrets periodically using the generation script
- Use secure transmission when adding to CI vault
Redirect URIs
- Exact matching required - include/exclude trailing slashes consistently
- HTTPS only in production
- Specific paths rather than wildcards
Scopes
- Minimal necessary scopes for each client
- Groups scope enables role-based access control
- Profile/email scopes for user information
📋 Available Scopes
openid
: Required for OIDC, provides user identifieremail
: User's email addressprofile
: User's display name and profile informationgroups
: User's group memberships for authorization
🔧 Advanced Configuration
Custom Authorization Policies
Create service-specific policies in configuration.oidc.clients.yml
:
authorization_policies:
portainer_admin:
default_policy: deny
rules:
- policy: one_factor
subject: group:portainer-admins
Group-Based Access Control
Map LDAP groups to service permissions:
portainer-admins
: Full Portainer accessdevelopers
: Git repository accessusers
: Basic service access
📞 Support
Common Issues
- Redirect URI mismatch: Check exact URL format
- Client secret mismatch: Regenerate and update vault
- Scope errors: Verify service supports requested scopes
- Network issues: Confirm Authelia accessibility
Logs and Debugging
# Check Authelia OIDC logs
ssh macmini7 'docker service logs authelia_authelia | grep -i oidc'
# Check service-specific OAuth logs
ssh macmini7 'docker service logs <service_name> | grep -i oauth'