story-research-zapwall/fixKnowledge/nostrcheck-me-authentication.md

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

  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 <base64-encoded-event>

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 <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 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 <token>
    • 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