NeahNew/N8N_API_KEY_SOLUTION.md
2026-01-09 11:19:32 +01:00

171 lines
4.5 KiB
Markdown

# Solution: N8N API Key Mismatch
## 🔍 Problème
**Avant** : Vous pouviez créer des missions sans `N8N_API_KEY`
- Mission créée ✅
- N8N callback échouait silencieusement ❌
- Mission restait en base sans IDs ❌
**Maintenant** : Avec `N8N_API_KEY` ajouté
- Mission créée ✅
- N8N callback appelé ✅
- **Mais clé API ne correspond pas → 401 → Mission création échoue** ❌
---
## ✅ Solution 1: Utiliser la Même Clé (RECOMMANDÉ)
### Étape 1: Trouver la Clé Générée par N8N
**Dans N8N** :
1. Allez dans les paramètres de votre workflow
2. Trouvez la clé API que N8N utilise
3. Ou regardez dans les logs d'exécution N8N pour voir quelle clé est envoyée
### Étape 2: Utiliser Cette Clé sur le Serveur
**Ajoutez la même clé dans votre environnement** :
```env
N8N_API_KEY=la-cle-generee-par-n8n
```
**Important** : Utilisez **exactement la même clé** que celle générée par N8N.
### Étape 3: Redémarrer le Serveur
```bash
# Redémarrer l'application
npm run dev
# ou
yarn dev
```
---
## ✅ Solution 2: Rendre la Vérification Plus Flexible (TEMPORAIRE)
Si vous voulez permettre la création de mission même si les clés ne correspondent pas :
**Modifier `app/api/missions/mission-created/route.ts`** :
```typescript
// Vérifier l'API key
const apiKey = request.headers.get('x-api-key');
const expectedApiKey = process.env.N8N_API_KEY;
// Si pas de clé configurée, accepter (mais logger un warning)
if (!expectedApiKey) {
logger.warn('N8N_API_KEY not configured, accepting request without validation');
// Continue without validation
} else if (apiKey && apiKey !== expectedApiKey) {
logger.error('Invalid API key', {
received: apiKey ? 'present' : 'missing',
expected: expectedApiKey ? 'configured' : 'missing'
});
return NextResponse.json(
{ error: 'Unauthorized' },
{ status: 401 }
);
} else if (!apiKey && expectedApiKey) {
logger.warn('API key expected but not provided, accepting anyway');
// Continue without validation (less secure but works)
}
```
**⚠️ Note** : Cette solution est moins sécurisée mais permet de continuer à fonctionner.
---
## ✅ Solution 3: Utiliser la Clé du Serveur dans N8N
**Au lieu d'utiliser la clé générée par N8N**, utilisez celle du serveur :
### Dans N8N "Save Mission To API" Node
**Header `x-api-key`** :
```
{{ $node['Process Mission Data'].json.config.N8N_API_KEY }}
```
**Cette valeur vient de** :
- `config.N8N_API_KEY` envoyé par le serveur (ligne 420)
- Qui vient de `process.env.N8N_API_KEY`
**Donc** : Si vous mettez la même clé dans `process.env.N8N_API_KEY`, N8N l'utilisera automatiquement.
---
## 🎯 Solution Recommandée
**Utiliser la clé générée par N8N dans l'environnement du serveur** :
1. **Copier la clé générée par N8N**
2. **L'ajouter dans `.env.local`** (ou variables d'environnement production) :
```env
N8N_API_KEY=votre-cle-generee-par-n8n
```
3. **Redémarrer le serveur**
4. **Tester la création de mission**
**Avantage** :
- ✅ Sécurisé (vérification de clé)
- ✅ Fonctionne correctement
- ✅ IDs sauvegardés
---
## 🔍 Comment Trouver la Clé N8N
### Option 1: Dans N8N Workflow
1. Ouvrez le workflow N8N
2. Regardez le node "Save Mission To API"
3. Vérifiez la valeur de `x-api-key` header
4. Ou regardez dans `config.N8N_API_KEY` dans "Process Mission Data"
### Option 2: Dans N8N Execution Logs
1. Allez dans N8N → Executions
2. Trouvez une exécution récente
3. Regardez le node "Save Mission To API"
4. Vérifiez les headers de la requête
5. Trouvez la valeur de `x-api-key`
### Option 3: Générer une Nouvelle Clé
**Si vous ne trouvez pas la clé**, vous pouvez :
1. Générer une nouvelle clé (ex: `openssl rand -hex 16`)
2. L'ajouter dans l'environnement du serveur
3. L'utiliser dans N8N workflow (hardcoder temporairement)
---
## 📋 Checklist
- [ ] Trouver la clé API générée par N8N
- [ ] Ajouter cette clé dans `N8N_API_KEY` environnement serveur
- [ ] Vérifier que N8N utilise `{{ $node['Process Mission Data'].json.config.N8N_API_KEY }}`
- [ ] Redémarrer le serveur
- [ ] Tester création de mission
- [ ] Vérifier que les IDs sont sauvegardés
---
## 🎯 Résumé
**Problème** : Clé API N8N ≠ Clé API serveur → 401 Unauthorized
**Solution** : Utiliser la **même clé** dans les deux endroits :
1. Environnement serveur : `N8N_API_KEY=cle-commune`
2. N8N workflow : Utilise automatiquement via `config.N8N_API_KEY`
**Après fix** : Mission création fonctionne et IDs sont sauvegardés ✅
---
**Document Created**: $(date)
**Priority**: HIGH - Blocks mission creation