Ontwerp een Traefik configuratie voor geavanceerde authenticatie en autorisatie
description
Met deze prompt kan de gebruiker een veilige en op maat gemaakte authenticatie- en autorisatiestructuur opzetten binnen Traefik, waardoor de API Gateway beter beschermd is tegen ongeautoriseerde toegang en beter aansluit op specifieke beveiligingseisen. Dit lost complexe beveiligingsuitdagingen op en is beter dan standaardconfiguraties omdat het rekening houdt met individuele wensen en infrastructuur.
prompt
Help me bij het ontwerpen en configureren van geavanceerde authenticatie- en autorisatiemechanismen in mijn Traefik API Gateway. Mijn huidige configuratie: ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een overzicht van hoe je OAuth2-integratie met Keycloak kunt configureren in Traefik om geavanceerde authenticatie- en autorisatiemechanismen te implementeren:
Stap 1: Gebruik van een externe OAuth2 proxy
Traefik ondersteunt standaard geen OAuth2-authenticatie. Daarom wordt vaak een OAuth2 proxy gebruikt, zoals [OAuth2 Proxy](https://oauth2-proxy.github.io/oauth2-proxy/), die fungeert als tussenlaag voor authenticatie via Keycloak.
Stap 2: Configureer de OAuth2 Proxy
- Installeer en configureer OAuth2 Proxy met je Keycloak-gegevens:
- Client ID en Client Secret
- Keycloak issuer URL
- Redirect URI (bijvoorbeeld: `https://example.com/oauth2/callback`)
- Zorg dat OAuth2 Proxy draait en toegankelijk is via een eigen entryPoint.
Stap 3: Traefik configureren om door te sturen naar OAuth2 Proxy
- Voeg een nieuwe router toe die alleen toegang geeft na authenticatie via OAuth2 Proxy.
Voorbeeld Traefik-configuratie (YAML):
```yaml
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
http:
routers:
example-router:
rule: "Host(`example.com`)"
service: example-service
middlewares:
- auth-oauth2
tls:
certResolver: myresolver
oauth2-proxy:
rule: "PathPrefix(`/oauth2`)"
service: oauth2-service
services:
example-service:
loadBalancer:
servers:
- url: "http://localhost:8080"
oauth2-service:
loadBalancer:
servers:
- url: "http://localhost:4180" # OAuth2 Proxy adres
middlewares:
auth-oauth2:
forwardAuth:
address: "http://localhost:4180/oauth2/auth"
trustForwardHeader: true
authResponseHeaders:
- X-Auth-Request-User
- X-Auth-Request-Groups
```
Stap 4: Zorg dat je OAuth2 Proxy correct is ingesteld met de juiste Keycloak-parameters.
Stap 5: Autorisatie op basis van groepen of rollen
- Configureer OAuth2 Proxy om gebruikersgroepen of rollen door te geven via headers.
- In Traefik kun je vervolgens via regels of middleware bepalen of de gebruiker toegang krijgt, bijvoorbeeld door te controleren op headers.
Stap 6: Testen en beveiligen
- Zorg dat je HTTPS gebruikt (`websecure` entryPoint).
- Implementeer aanvullende beveiligingsmaatregelen zoals CSRF-bescherming en sessiebeheer.
Samenvatting:
- Traefik zelf doet geen OAuth2-authenticatie, maar gebruikt een externe OAuth2 Proxy.
- Configuratie bestaat uit het opzetten van de proxy, de juiste routing en middleware in Traefik.
- Keycloak wordt gebruikt als Identity Provider (IdP).
Wil je dat ik je help met een volledige voorbeeldconfiguratie voor OAuth2 Proxy of verdere stappen?
provider: deepseek
model: deepseek-chat
Hier is een uitgebreide configuratie voor geavanceerde OAuth2 authenticatie met Keycloak in Traefik:
## 1. Traefik Dynamic Configuration (YAML)
```yaml
http:
routers:
example-router:
rule: "Host(`example.com`)"
service: example-service
middlewares:
- keycloak-oauth
tls: {} # Optioneel voor HTTPS
middlewares:
keycloak-oauth:
forwardAuth:
address: "http://keycloak-auth:8080/auth/realms/your-realm/protocol/openid-connect/auth"
trustForwardHeader: true
authResponseHeaders:
- "X-Forwarded-User"
- "X-Forwarded-Email"
- "X-Forwarded-Preferred-Username"
```
## 2. Docker Compose Setup
```yaml
version: '3.8'
services:
traefik:
image: traefik:v2.10
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik.yml:/etc/traefik/traefik.yml
- ./dynamic.yml:/etc/traefik/dynamic.yml
networks:
- traefik-net
keycloak:
image: quay.io/keycloak/keycloak:21.0.0
environment:
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
KC_PROXY: edge
command: start-dev
ports:
- "8080:8080"
networks:
- traefik-net
keycloak-auth:
image: thomsch98/oauth2-proxy:7.4.0
environment:
OAUTH2_PROXY_PROVIDER: oidc
OAUTH2_PROXY_OIDC_ISSUER_URL: "http://keycloak:8080/auth/realms/your-realm"
OAUTH2_PROXY_CLIENT_ID: "traefik-client"
OAUTH2_PROXY_CLIENT_SECRET: "your-client-secret"
OAUTH2_PROXY_COOKIE_SECRET: "random-secret-string"
OAUTH2_PROXY_UPSTREAMS: "http://example-service:8080"
OAUTH2_PROXY_EMAIL_DOMAINS: "*"
OAUTH2_PROXY_SKIP_PROVIDER_BUTTON: "true"
networks:
- traefik-net
networks:
traefik-net:
driver: bridge
```
## 3. Keycloak Client Configuratie
1. **Realm aanmaken** in Keycloak admin console
2. **Client creëren**:
- Client ID: `traefik-client`
- Client Protocol: `openid-connect`
- Access Type: `confidential`
- Valid Redirect URIs: `http://example.com/oauth2/callback`
3. **Client Scope** toevoegen:
- `email`
- `profile`
- `roles`
## 4. Geavanceerde Middleware Configuratie
```yaml
http:
middlewares:
# Basis OAuth2 middleware
keycloak-oauth:
forwardAuth:
address: "http://keycloak-auth:8080/oauth2/auth"
trustForwardHeader: true
authResponseHeaders:
- "X-Forwarded-User"
- "X-Forwarded-Email"
- "X-Forwarded-Preferred-Username"
- "Authorization"
# Rate limiting voor auth endpoints
auth-rate-limit:
rateLimit:
burst: 100
period: 1m
average: 30
# IP Whitelist voor admin endpoints
admin-whitelist:
ipWhiteList:
sourceRange:
- "192.168.1.0/24"
- "10.0.0.1/32"
```
## 5. Rol-gebaseerde Autorisatie
```yaml
http:
routers:
admin-router:
rule: "Host(`admin.example.com`)"
service: admin-service
middlewares:
- keycloak-oauth
- require-admin-role
user-router:
rule: "Host(`api.example.com`)"
service: api-service
middlewares:
- keycloak-oauth
- require-user-role
middlewares:
require-admin-role:
forwardAuth:
address: "http://keycloak-auth:8080/oauth2/auth"
authResponseHeaders:
- "X-Forwarded-User"
- "X-Forwarded-Roles"
authRequestHeaders:
- "X-Required-Roles"
```
## 6. Traefik Static Configuration
```yaml
api:
dashboard: true
insecure: true
entryPoints:
web:
address: ":80"
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
file:
filename: "/etc/traefik/dynamic.yml"
watch: true
log:
level: DEBUG
```
## 7. Beveiligingsheaders Middleware
```yaml
http:
middlewares:
security-headers:
headers:
sslRedirect: true
stsSeconds: 31536000
browserXssFilter: true
contentTypeNosniff: true
forceSTSHeader: true
stsIncludeSubdomains: true
stsPreload: true
frameDeny: true
```
## Belangrijke Overwegingen:
1. **SSL/TLS**: Gebruik altijd HTTPS in productie
2. **Secrets Management**: Gebruik Docker secrets of externe vault
3. **Monitoring**: Implementeer logging en monitoring
4. **Backup**: Regelmatige backups van Keycloak configuratie
5. **Scaling**: Overweeg Keycloak cluster voor hoge beschikbaarheid
Deze configuratie biedt een robuuste OAuth2/OpenID Connect integratie met Keycloak voor geavanceerde authenticatie en autorisatie in je Traefik API Gateway.