Configuration JWT Caddy ↔ Keycloak (infrastructure)¶
Étapes réalisées¶
- Redémarrage du conteneur
keycloak(admin créé :admin/StrongPass123!). - Création du client caddy-dashboard via l’API admin Keycloak :
ADMIN_TOKEN=$(curl -s -X POST "http://127.0.0.1:8081/realms/master/protocol/openid-connect/token" \ -d "grant_type=password" -d "client_id=admin-cli" \ -d "username=admin" -d "password=StrongPass123!" | sed -n 's/.*"access_token":"\([^"]*\)".*/\1/p') CLIENT_SECRET="ccc779df0457304df40c2bbbab980be8" curl -s -X POST "http://127.0.0.1:8081/admin/realms/master/clients" \ -H "Authorization: Bearer $ADMIN_TOKEN" \ -H "Content-Type: application/json" \ -d '{"clientId":"caddy-dashboard","secret":"$CLIENT_SECRET","serviceAccountsEnabled":true,"standardFlowEnabled":false,"directAccessGrantsEnabled":false,"publicClient":false,"authorizationServicesEnabled":true}' - Obtention d’un token client‑credentials :
CLIENT_TOKEN=$(curl -s -X POST "http://127.0.0.1:8081/realms/master/protocol/openid-connect/token" \ -d "grant_type=client_credentials" \ -d "client_id=caddy-dashboard" \ -d "client_secret=$CLIENT_SECRET" | sed -n 's/.*"access_token":"\([^"]*\)".*/\1/p') - Reload de Caddy :
docker exec shared-caddy caddy reload --config /etc/caddy/Caddyfile - Tests d’accès au dashboard :
- Sans token →
401 Unauthorized. - Avec token →
200 OK.
Vérifications¶
- Le JWT est bien validé par Caddy (directive
jwt { jwks_url http://127.0.0.1:8081/realms/master/protocol/openid-connect/certs }). - Le tableau des rôles n’est pas nécessaire ; le simple service‑account suffit.
Points d’attention¶
- Le secret du client est stocké ici en texte brut ; il ne doit pas être partagé.
- Renouveler le secret si vous suspectez une fuite.
- Toute modification du
Caddyfiledoit être suivie d’undocker exec shared-caddy caddy reload.