Compte, sécurité et tokens API
Utilisateurs
Sous Paramètres → Utilisateurs, vous créez des comptes supplémentaires. Tous les comptes sont administrateurs avec un accès complet ; il n’y a volontairement pas de gestion des droits.
- Créer un compte : nom d’utilisateur et mot de passe (au moins 8 caractères) – transmettez les identifiants à la personne par un moyen sûr.
- Définir le mot de passe : pour les mots de passe oubliés. Le compte est alors déconnecté sur tous les appareils.
- Supprimer : déconnecte immédiatement le compte ; les contenus sont conservés. Votre propre compte et le dernier compte ne peuvent pas être supprimés.
- La liste indique quand quelqu’un s’est connecté pour la dernière fois.
Apparence et langue
Tout en bas du menu principal – et en haut à droite de la page de connexion :
- Apparence (les trois symboles soleil, lune, écran) : Clair, Sombre ou Système (par défaut – suit le réglage clair/sombre du système d’exploitation et change avec lui), Clair ou Sombre. L’éditeur de Workflows, les statistiques et la carte du monde s’adaptent. Les éditeurs de code restent sombres dans les deux variantes, comme dans les environnements de développement – la coloration syntaxique reste ainsi bien lisible. L’aperçu de votre site reste tel que le site lui-même apparaît.
- Langue de l’interface (clic sur le drapeau) : Langue du navigateur (par défaut) ou, de façon fixe, anglais, allemand, français, italien ou espagnol. Si la langue du navigateur n’est pas prise en charge, l’anglais s’affiche.
Les deux réglages valent pour ce navigateur (enregistrés dans le navigateur, pas dans le compte) – sur un autre ordinateur, vous les définissez là-bas. La langue de l’interface n’a rien à voir avec la langue des contenus de votre site.
Connexion
- Changer le mot de passe : Paramètres → Mon compte.
- Protection de la connexion : après 10 tentatives échouées depuis la même adresse IP, les connexions sont bloquées pendant 15 minutes.
- Les sessions sont valables 14 jours.
Tokens API
Pour les programmes externes (scripts de synchronisation, frontends headless, automatisations), vous créez un token sous Paramètres → Tokens API :
- Lecture seule – peut récupérer des contenus.
- Lecture + écriture – peut créer et modifier des contenus, mais pas gérer de tokens ni de mots de passe.
Le token n’est affiché qu’une seule fois. Utilisation : en-tête Authorization: Bearer <token>, pour de simples requêtes GET aussi comme paramètre d’URL ?token=<token> (il apparaît alors toutefois dans l’historique et les journaux du serveur – utilisez de préférence un token en lecture seule). Révoquer le bloque immédiatement. Tous les points de terminaison figurent dans la documentation de l’API.
Intégrations et modifications atomiques
Les programmes qui gèrent IllusionCMS via l’API (par ex. IllusionPublish, n8n ou vos propres scripts) enregistrent plusieurs modifications de pages, d’entrées, de blocs globaux, de snippets et de fichiers en une seule fois avec POST /batch : soit tout réussit, soit rien n’est modifié – même si quelqu’un a modifié entre-temps l’une des pages concernées. Avec une clé d’idempotence, un batch peut être répété sans risque, sans que rien ne soit créé deux fois. Si un token écrit pour le compte d’une personne (en-tête X-IC-On-Behalf-Of), l’historique des versions affiche par ex. Token „Publish“ – im Auftrag von Maria Muster. GET /schema renvoie les collections, les blocs, les langues et les sites en une seule réponse. Les détails se trouvent dans la documentation de l’API. Ces programmes sont informés des modifications par des webhooks.
Webhooks
Les webhooks avertissent d’autres programmes dès que quelque chose change : IllusionCMS envoie alors un POST avec une description JSON de la modification à une adresse – par exemple à n8n, à un service qui reconstruit un site statique, à IllusionPublish ou à une entrée HTTP d’un de vos workflows.
Configurer un webhook
Sous Paramètres → Webhooks, cliquez sur + Webhook et indiquez un nom (facultatif), l’adresse (http:// ou https://), les événements souhaités et Actif. Laissez le champ du secret vide – IllusionCMS en génère alors un et l’affiche une seule fois. Copiez-le et enregistrez-le chez le destinataire. Plus tard, sous Modifier, vous pouvez générer un Nouveau secret (l’ancien cesse immédiatement de fonctionner) ou saisir le vôtre (au moins 16 caractères).
- Le secret n’est stocké que chiffré dans la base de données – comme le secret S3. Si vous déplacez la base vers un autre serveur, emportez
IC_ENCRYPTION_KEYoudata/secret.key(voir Stocker les médias dans S3). - Les webhooks appartiennent à l’instance, pas au contenu : ils ne font pas partie du bundle. En mode distant, vous modifiez les webhooks du serveur.
- 20 webhooks au maximum ; les webhooks inactifs ne reçoivent rien (sauf Envoyer un test).
Événements de webhook
content.changed– des pages, entrées, blocs globaux, fichiers, snippets ou CSS/JS ont été créés, modifiés, déplacés ou supprimés, y compris par un import, un bundle, un import CSV ou un batch. Les modifications survenues en environ 2 secondes arrivent en une seule livraison – enregistrer dix entrées ne déclenche pas dix builds.schema.changed– une collection a été créée, modifiée ou supprimée, ou le schéma d’un type de bloc a changé. Laschema_versionactuelle deGET /schemaest incluse.batch.applied– unPOST /batcha été appliqué, avec ses résultats.
Voici à quoi ressemble une livraison :
{ "event": "content.changed", "at": 1791572100,
"changes": [ { "kind": "page", "action": "updated", "id": 12 },
{ "kind": "item", "action": "created", "id": 31, "collection": "blog" } ] }
Tous les formats sont décrits dans la documentation de l’API.
Vérifier la signature
Chaque livraison porte l’en-tête X-IC-Signature: sha256=… – un HMAC-SHA256 du corps avec votre secret. Le destinataire le recalcule et rejette tout ce qui ne correspond pas ; personne ne peut ainsi injecter de faux événements. Important : calculez-le sur le corps non modifié, pas sur du JSON régénéré. En Node.js : Nous envoyons aussi X-IC-Timestamp et X-IC-Signature-V2 (HMAC sur horodatage.corps) ; vous pouvez rejeter les livraisons dont l’horodatage a plus de 5 minutes (protection contre la rediffusion). La réponse du destinataire n’apparaît pas dans le journal de livraison, seulement le code de statut.
const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex')
const ok = expected.length === header.length && crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(header))
Un exemple complet en JavaScript et en Go se trouve dans la documentation de l’API. Autres en-têtes : X-IC-Event (événement) et X-IC-Delivery (identifiant unique, identique lors des nouvelles tentatives – il permet de repérer les livraisons en double). Les workflows de cette instance ne peuvent pas vérifier la signature (le nœud Function ne connaît pas HMAC).
Tests et livraisons
- Envoyer un test envoie immédiatement un événement
pinget affiche le résultat – statut HTTP et durée, ou l’erreur. - Livraisons affiche les 50 dernières livraisons depuis le démarrage du serveur : heure, événement, statut (livré, échoué, en cours, ignoré), statut HTTP, durée, tentatives et erreur avec le début de la réponse. Après un redémarrage, la liste est vide.
- Si le destinataire ne répond pas dans les 10 secondes, ou répond
408,429ou5xx, IllusionCMS réessaie jusqu’à trois fois (après 2, 10 et 30 secondes). Les autres réponses comme404ne sont pas réessayées ; toute réponse2xxcompte comme livrée. - Protection contre les boucles : si un webhook appelle un de vos workflows qui modifie à nouveau du contenu, cela se répéterait sans fin. C’est pourquoi tout s’arrête après trois livraisons successives – les suivantes apparaissent comme ignoré dans le journal.
- Pour essayer sans service externe : un workflow avec une entrée HTTP publique (
POST) qui enregistremsg.payloadavecstore.set(…), et un webhook pointant vers son adresse – c’est aussi ce que fait le seed de test.
En-têtes de sécurité
Sous Paramètres → Sécurité, vous définissez quels en-têtes de protection IllusionCMS envoie. Les réglages ne valent que pour cette instance et ne font pas partie du Bundle ; vous les configurez donc séparément en local et en production. Le tableau En-têtes envoyés montre le résultat.
| Paramètre | Valeur par défaut | Effet |
|---|---|---|
X-Content-Type-Options: nosniff |
toujours activé | Les navigateurs ne devinent pas le type de fichier ; une image téléversée, p. ex., n’est jamais exécutée comme script |
| Referrer | Standard | Lors d’un clic sur un lien, les sites tiers ne voient que votre domaine, pas la page exacte |
| Intégration (iframe) | Uniquement ses propres pages | Protège contre le clickjacking : des sites tiers ne peuvent pas intégrer les vôtres de manière invisible. Ses propres pages et certains domaines l’autorise p. ex. pour un partenaire (https://partner.de, *.partner.de), Autorisé partout désactive la protection |
| Bloquer les fonctions du navigateur | désactivé | Bloque caméra, micro, localisation, paiements, USB/Bluetooth, etc. À laisser désactivé si une page utilise p. ex. « Ma position » dans une carte |
| HSTS | désactivé | Les navigateurs n’accèdent plus au site qu’en HTTPS. N’est envoyé qu’en HTTPS, y compris derrière un proxy qui définit X-Forwarded-Proto: https. Attention : les navigateurs le mémorisent pour la durée définie, même si vous désactivez de nouveau HSTS. Ne l’activez que lorsque HTTPS fonctionne durablement, et commencez par 5 minutes pour essayer |
| Content-Security-Policy | vide | Vos propres règles indiquant d’où les scripts, images, polices … peuvent être chargés. Avec Signaler seulement, le navigateur ne bloque rien, mais signale les violations dans la console. Vous testez ainsi une règle avant de l’activer pour de bon |
Masquer la version dans /healthz |
désactivé | Les visiteurs ne voient plus que {"status":"ok"}. Les personnes connectées et les tokens API voient toujours la version (l’affichage de la version dans l’admin fonctionne donc) |
L’intégration, les fonctions du navigateur et la CSP s’appliquent aux pages du site (pages, 404, sitemap, robots.txt), pas à l’admin, à l’API, aux fichiers ni au CSS/JS. L’aperçu de l’admin n’est pas concerné.
Ce que vous devez savoir
- Le HTML, le CSS et le JS sont considérés comme dignes de confiance. Quiconque travaille dans l’admin peut mettre n’importe quel code sur le site – attribuez les accès et les tokens en écriture en conséquence.
- Les champs Markdown n’émettent pas de HTML intégré ; les entrées de Collection qui arrivent de l’extérieur via l’API ne peuvent ainsi pas injecter de code.
- Les SVG téléversés sont servis avec une politique de sécurité qui bloque les scripts intégrés. Les fichiers HTML, XML et à extension inconnue téléversés sont servis sans exécution de scripts et en téléchargement (politique sandbox, pas de devinette de type) – on peut toujours les téléverser et les lier, mais ils ne s’exécutent pas comme page dans l’origine de l’admin.