# Authentification pour nostrcheck.me API ## Date 2025-01-27 ## Problème L'endpoint `https://nostrcheck.me/api/v1/media` retourne une erreur 401 Unauthorized lors des tentatives d'upload, indiquant qu'une authentification est requise. ## Symptômes - Erreur 401 lors des appels à `/api/nip95-upload?endpoint=https://nostrcheck.me/api/v1/media` - Message d'erreur : `{"result":false,"description":"Authorization header not found"}` - Les uploads vers nostrcheck.me échouent systématiquement ## Recherche effectuée ### Informations trouvées sur nostrcheck.me 1. **Authentification du site web** : - Support de NIP-07 (extensions de navigateur comme Alby) - Code à usage unique envoyé via message direct Nostr lors de l'inscription - Nécessite la création d'un compte sur nostrcheck.me 2. **Services offerts** : - Enregistrement d'adresses Nostr (NIP-05) - Hébergement de médias - Galeries privées et publiques - Relais privé 3. **API d'upload** : - Endpoint : `https://nostrcheck.me/api/v1/media` - Nécessite un header `Authorization` - Format du header non documenté publiquement ### NIP-98 (HTTP Auth pour Nostr) NIP-98 est le standard d'authentification HTTP pour Nostr. Il permet d'authentifier des requêtes HTTP en signant un événement Nostr qui contient : - La méthode HTTP (POST) - L'URL de la requête - Le hash du body (optionnel) - Un timestamp Le header `Authorization` devrait contenir un token au format NIP-98, généralement : ``` Authorization: Nostr ``` ## Hypothèses 1. **NIP-98 requis** : nostrcheck.me utilise probablement NIP-98 pour l'authentification de l'API 2. **Compte requis** : Un compte doit être créé sur nostrcheck.me avant d'utiliser l'API 3. **Signature d'événement** : Il faut probablement signer un événement Nostr avec la clé privée de l'utilisateur pour générer le token d'authentification ## À explorer ### 1. Documentation de l'API nostrcheck.me - Vérifier s'il existe une documentation publique de l'API - Contacter le support de nostrcheck.me pour obtenir les spécifications - Examiner le code source si disponible ### 2. Implémentation de NIP-98 Si NIP-98 est requis, il faut : - Créer une fonction pour générer un événement d'authentification NIP-98 - Signer cet événement avec la clé privée de l'utilisateur (via Alby ou clé locale) - Encoder l'événement signé en base64 - Ajouter le header `Authorization: Nostr ` aux requêtes ### 3. Format de l'événement NIP-98 L'événement devrait contenir : - `kind`: Probablement un kind spécifique pour l'authentification HTTP - `tags`: Tags avec la méthode HTTP, l'URL, etc. - `content`: Vide ou contenant des métadonnées - `created_at`: Timestamp actuel - `pubkey`: Clé publique de l'utilisateur - `sig`: Signature de l'événement ### 4. Intégration dans l'API proxy Modifier `pages/api/nip95-upload.ts` pour : - Détecter si l'endpoint est nostrcheck.me - Générer un token NIP-98 si l'utilisateur est authentifié - Ajouter le header Authorization à la requête ## Code existant disponible Le projet dispose déjà de : - `lib/nostrRemoteSigner.ts` : Service de signature d'événements Nostr - `lib/nostrAuth.ts` : Service d'authentification Nostr - Support de NIP-07 via Alby extension - Gestion des clés privées (stockage chiffré) ## Implémentation réalisée ✅ **NIP-98 implémenté** (2025-01-27) 1. **Création de `lib/nip98.ts`** : - Fonction `generateNip98Token()` pour générer le token d'authentification - Support de la signature via `nostrRemoteSigner` (Alby/nos2x) - Encodage base64 de l'événement signé 2. **Intégration dans `lib/nip95.ts`** : - Détection automatique de nostrcheck.me - Génération du token NIP-98 avant l'upload - Passage du token à l'API proxy 3. **Support dans `pages/api/nip95-upload.ts`** : - Récupération du token depuis les paramètres de requête - Ajout du header `Authorization: Nostr ` - Préservation du token lors des redirections ## Utilisation Pour utiliser nostrcheck.me : 1. Créer un compte sur nostrcheck.me avec la même clé Nostr (via nos2x, Alby, etc.) 2. Se connecter à l'application avec la même extension/clé 3. Activer nostrcheck.me dans les settings (`/settings`) 4. L'upload vers nostrcheck.me fonctionnera automatiquement avec l'authentification NIP-98 ## Notes - L'authentification NIP-98 nécessite que l'utilisateur soit connecté avec Alby ou ait une clé privée disponible - Le token doit être généré côté client (navigateur) car il nécessite la clé privée - L'API proxy côté serveur ne peut pas générer le token sans avoir accès à la clé privée de l'utilisateur - Solution possible : Générer le token côté client et le passer en paramètre à l'API proxy ## Références - nostrcheck.me : https://nostrcheck.me/ - NIP-07 : https://github.com/nostr-protocol/nips/blob/master/07.md - NIP-98 : À rechercher dans le repository des NIPs