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. |
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. |
sign: all ne veut pas dire anonyme. La vérification de session s'exécute d'abord, avant toute évaluation de permission : all élargit donc la signature à tout utilisateur connecté, pas au public. Si vous voulez des fichiers atteignables sans aucune session, c'est public: true sur le bucket ou un préfixe STORAGE_PUBLIC_PATHS — pas une permission de signature.
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
- URL de téléchargement — jetons de lecture et expiration.
- Téléversement et signature par lot — jetons d'écriture et émission en masse.
- Permissions de bucket —
signetsignUpload. - Backends de stockage — présignature S3 ou HMAC interne.
- Opérations sur les fichiers — l'alternative fondée sur la session.
- Variables d'environnement : services — la configuration des chemins publics.
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.