4.9 KiB
4.9 KiB
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
-
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
-
Services offerts :
- Enregistrement d'adresses Nostr (NIP-05)
- Hébergement de médias
- Galeries privées et publiques
- Relais privé
-
API d'upload :
- Endpoint :
https://nostrcheck.me/api/v1/media - Nécessite un header
Authorization - Format du header non documenté publiquement
- Endpoint :
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 <base64-encoded-event>
Hypothèses
- NIP-98 requis : nostrcheck.me utilise probablement NIP-98 pour l'authentification de l'API
- Compte requis : Un compte doit être créé sur nostrcheck.me avant d'utiliser l'API
- 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 <token>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 HTTPtags: Tags avec la méthode HTTP, l'URL, etc.content: Vide ou contenant des métadonnéescreated_at: Timestamp actuelpubkey: Clé publique de l'utilisateursig: 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 Nostrlib/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)
-
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é
- Fonction
-
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
-
Support dans
pages/api/nip95-upload.ts:- Récupération du token depuis les paramètres de requête
- Ajout du header
Authorization: Nostr <token> - Préservation du token lors des redirections
Utilisation
Pour utiliser nostrcheck.me :
- Créer un compte sur nostrcheck.me avec la même clé Nostr (via nos2x, Alby, etc.)
- Se connecter à l'application avec la même extension/clé
- Activer nostrcheck.me dans les settings (
/settings) - 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