Aller au contenu

Configuration JWT Caddy ↔ Keycloak (infrastructure)

Étapes réalisées

  1. Redémarrage du conteneur keycloak (admin créé : admin/StrongPass123!).
  2. 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}'
    
  3. 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')
    
  4. Reload de Caddy :
    docker exec shared-caddy caddy reload --config /etc/caddy/Caddyfile
    
  5. Tests d’accès au dashboard :
  6. Sans token401 Unauthorized.
  7. Avec token200 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 Caddyfile doit être suivie d’un docker exec shared-caddy caddy reload.