Skip to main content
Voir en Markdown

URL signées

Un fichier privé ne peut pas être placé dans un <img src>, envoyé par courriel à un client, ni confié à un moteur de rendu tiers : aucun de ces contextes ne transporte votre cookie de session. Rendre le bucket public pour résoudre cela échange un problème circonscrit contre un problème sans limites.

Une URL signée est la voie médiane. C'est une URL ordinaire portant un jeton HMAC-SHA256 qui lie le bucket, le chemin, l'opération et une expiration absolue en une seule signature. Modifiez l'un de ces quatre éléments dans la chaîne de requête et la signature cesse de correspondre : le jeton accorde donc exactement un fichier, pour un seul usage, jusqu'à un seul instant — et rien d'autre.

La clé de signature est AUTH_SECRET — ou, si vous n'en avez pas défini, une valeur dérivée de la clé de chiffrement de l'application. Changer l'une ou l'autre invalide d'un coup toutes les URL signées en circulation : c'est le levier d'urgence prévu.

Accès public ou privé

Avant de recourir à une signature, sachez quels fichiers en ont besoin. Trois réglages en décident, du plus large au plus étroit :

Réglage Portée Effet
STORAGE_DEFAULT_ACCESS=public Tous les fichiers Plus rien n'est privé. La signature perd son objet.
STORAGE_PUBLIC_PATHS Préfixes de clés Les fichiers sous un préfixe listé sont servis sans session ni jeton.
public: true sur un bucket Un bucket Les fichiers de ce bucket sont servis sans session ni jeton.
>_ terminal
STORAGE_DEFAULT_ACCESS=private
STORAGE_PUBLIC_PATHS=assets/,avatars/,logos/

Les préfixes sont comparés littéralement à la clé de stockage : avatars/ couvre avatars/me.png et rien d'autre. Les caractères génériques sont rejetés au démarrage plutôt que de ne jamais correspondre en silence — un * dans la valeur trahit presque toujours un malentendu sur la sémantique, et échouer bruyamment vaut mieux qu'un préfixe qui ne protège discrètement rien.

Tout ce qui sort de ces trois exceptions répond 404 à une requête anonyme. C'est là que la signature prend son sens.

URL signées de téléchargement

Déplacé vers URL de téléchargement — émettre un jeton de lecture et régler sa fenêtre d'expiration.

URL signées de téléversement

Déplacé vers Téléversement et signature par lot — téléversements directs depuis le navigateur, avec contraintes liées au jeton.

Signature par lot

Déplacé vers Téléversement et signature par lot — jusqu'à 100 URL en un aller-retour.

Résumé des points de terminaison

Méthode Point de terminaison Authentification
POST /api/buckets/{bucket}/sign Session requise.
POST /api/buckets/{bucket}/sign/batch Session requise.
GET /api/buckets/{bucket}/signed?path=…&… Aucune — le jeton est l'identifiant.
PUT /api/buckets/{bucket}/signed?path=…&… Aucune — le jeton est l'identifiant.

Notez la structure : signer et utiliser sont deux routes différentes. Vous émettez sur /sign avec une session, et l'URL obtenue pointe vers /signed, qui n'exige rien. C'est précisément ce qui rend l'URL transmissible.

Contrôle d'accès

La signature est encadrée par les permissions sign et signUpload du bucket :

Appelant Réponse
Sans session 401
Avec session, rôle correspondant à la permission L'URL signée.
Avec session, rôle non correspondant 404 — la frontière elle-même reste invisible.
admin Passe toujours, quelle que soit la permission.
Bucket sans bloc permissions Administrateurs uniquement. C'est le défaut, et il est strict.

Intégration aux champs de pièce jointe

Déplacé vers Champs de pièce jointe et stockage — comment la pièce jointe d'un enregistrement arrive déjà signée.

Pages associées

Dernière mise à jour 11 août 2026

Cette documentation a été rédigée avec de l'IA : des erreurs ou du contenu obsolète sont donc possibles. Sovrium est en bêta. Les contributions et corrections sont les bienvenues.

Construit avec Sovrium