File API v2 offre 3 modes d'authentification configurables lors de l'installation.
Configuration :
auth_mode: home_assistant
api_secret: "" # Laissez videUtilisation :
# Générez un Long-Lived Access Token dans HA
# Profil → Tokens d'accès de longue durée → Créer un token
curl -X POST "${HA_URL}/api/hassio/ingress/file_api_v2/api/file/read" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-H "Content-Type: application/json" \
-d '{"path": "configuration.yaml"}'✅ Avantages :
- Sécurité maximale (token HA natif)
- Révocation facile dans HA
- Expire si défini
❌ Inconvénients :
- Token long et complexe
- Nécessite régénération si révoqué
Configuration :
auth_mode: api_secret
api_secret: "mon_secret_super_securise_123" # Définissez votre secretUtilisation :
# Utilisez votre secret comme Bearer token
curl -X POST "${HA_URL}/api/hassio/ingress/file_api_v2/api/file/read" \
-H "Authorization: Bearer mon_secret_super_securise_123" \
-H "Content-Type: application/json" \
-d '{"path": "configuration.yaml"}'✅ Avantages :
- Token simple et mémorisable
- Pas de dépendance à HA
- Parfait pour scripts automatisés
❌ Inconvénients :
- Moins sécurisé qu'un token HA
- Pas de révocation facile (modifier config addon)
💡 Recommandation : Générez un secret aléatoire fort :
# Générer un secret de 32 caractères
openssl rand -base64 32 | tr -d "=+/" | cut -c1-32
# Ex: K7mP9nQ2wX5tY8zR4vL1cH6jN3bM0sAConfiguration :
auth_mode: both
api_secret: "mon_secret_123"Utilisation : Accepte soit le token HA soit votre API secret.
✅ Avantages :
- Maximum de flexibilité
- Token HA pour usage ponctuel
- API secret pour automatisation
❌ Inconvénients :
- Surface d'attaque plus grande
- Configuration plus complexe
- Paramètres → Modules complémentaires → File API v2
- Onglet Configuration
- Modifier les valeurs :
# Mode d'authentification
auth_mode: api_secret # home_assistant | api_secret | both
# Secret API (si mode api_secret ou both)
api_secret: "VOTRE_SECRET_ICI"
# Niveau de logs
log_level: info # debug, info, warning, error
# Extensions autorisées
allowed_extensions:
- .yaml
- .yml
- .json
- .js
- .py
- .md
- .txt
- .sh
# Taille max fichiers (MB)
max_file_size_mb: 10- Sauvegarder
- Redémarrer l'addon
(Suivre INSTALL.md)
Pour usage avec Claude Code (recommandé) :
- Ouvrir la configuration de l'addon
- Définir :
auth_mode: api_secret api_secret: "K7mP9nQ2wX5tY8zR4vL1cH6jN3bM0sA" # Générez le vôtre !
- Sauvegarder et redémarrer
Pour usage avec scripts Home Assistant :
- Laisser la config par défaut :
auth_mode: home_assistant api_secret: ""
- Créer un token HA : Profil → Tokens d'accès de longue durée
# Health check (voir le mode configuré)
curl -s "${HA_URL}/api/hassio/ingress/file_api_v2/health"
# Résultat :
{
"status": "healthy",
"version": "2.0.0",
"auth_mode": "api_secret",
"api_secret_configured": true
}# Test avec votre secret
curl -s -X POST "${HA_URL}/api/hassio/ingress/file_api_v2/api/file/list" \
-H "Authorization: Bearer K7mP9nQ2wX5tY8zR4vL1cH6jN3bM0sA" \
-H "Content-Type: application/json" \
-d '{"path": "www"}'✅ À FAIRE :
- Utilisez un secret fort (32+ caractères aléatoires)
- Ne partagez jamais votre secret
- Changez le secret régulièrement
- Utilisez HTTPS (Nabu Casa ou reverse proxy)
- Limitez l'accès réseau à l'addon
❌ À NE PAS FAIRE :
- Secret simple comme "password123"
- Commiter le secret dans Git
- Utiliser le même secret partout
- Exposer l'addon sur Internet sans HTTPS
Option 1 : OpenSSL (Terminal Mac/Linux)
openssl rand -base64 32 | tr -d "=+/" | cut -c1-32Option 2 : Python
import secrets
print(secrets.token_urlsafe(32))Option 3 : Site web (si vous n'avez pas accès au terminal) https://passwordsgenerator.net/ (32 caractères, alphanumerique)
| Critère | Home Assistant | API Secret | Both |
|---|---|---|---|
| Sécurité | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| Simplicité setup | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| Automatisation | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Révocation | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ |
Recommandation par cas d'usage :
| Usage | Mode recommandé |
|---|---|
| Claude Code automatisé | api_secret |
| Scripts HA ponctuels | home_assistant |
| Environnement partagé | home_assistant |
| CI/CD pipelines | api_secret |
| Maximum sécurité | home_assistant |
| Maximum simplicité | api_secret |
Cause : Token incorrect ou mode d'auth mal configuré.
Solution :
- Vérifier le mode :
curl ${HA_URL}/api/hassio/ingress/file_api_v2/health - Si
auth_mode: api_secret→ Utiliser votre secret - Si
auth_mode: home_assistant→ Utiliser token HA - Vérifier que
api_secret_configured: truesi mode api_secret
Cause : Mode api_secret mais champ vide.
Solution :
- Ouvrir configuration addon
- Remplir
api_secret: "votre_secret" - Sauvegarder et redémarrer
Cause : Token révoqué ou expiré.
Solution :
- Profil HA → Tokens d'accès de longue durée
- Supprimer l'ancien token
- Créer un nouveau token
- Mettre à jour vos scripts
- Configurer
api_secretdans l'addon - Sauvegarder le secret dans la mémoire Claude :
# Dans une conversation avec Claude :
"Mon API secret File API est : K7mP9nQ2wX5tY8zR4vL1cH6jN3bM0sA"- Claude peut ensuite automatiser :
curl -X POST "${HA_URL}/api/hassio/ingress/file_api_v2/api/file/write" \
-H "Authorization: Bearer K7mP9nQ2wX5tY8zR4vL1cH6jN3bM0sA" \
-H "Content-Type: application/json" \
-d '{"path": "www/dolce-gusto-card.js", "content": "..."}'const axios = require('axios');
const fileAPI = axios.create({
baseURL: 'https://YOUR_INSTANCE.ui.nabu.casa/api/hassio/ingress/file_api_v2',
headers: {
'Authorization': 'Bearer K7mP9nQ2wX5tY8zR4vL1cH6jN3bM0sA',
'Content-Type': 'application/json'
}
});
// Lire configuration.yaml
const config = await fileAPI.post('/api/file/read', {
path: 'configuration.yaml'
});
console.log(config.data.content);# configuration.yaml
shell_command:
backup_config: >
curl -X POST "http://localhost:8100/api/file/read"
-H "Authorization: Bearer K7mP9nQ2wX5tY8zR4vL1cH6jN3bM0sA"
-H "Content-Type: application/json"
-d '{"path": "configuration.yaml"}' > /config/backups/config_$(date +%Y%m%d).yaml