129 lines
4.9 KiB
Markdown
129 lines
4.9 KiB
Markdown
# 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
|
|
|
|
- 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
|