Tous les produits
Search
Centre de documentation

Object Storage Service:Signature POST V1

Dernière mise à jour :Aug 26, 2026

La signature POST V1 sécurise les requêtes de téléchargement que les clients envoient à Object Storage Service (OSS) via l'opération PostObject. Le serveur d'application calcule une signature à partir d'une politique de téléchargement et transmet ces deux éléments au client, qui les soumet dans des champs de formulaire. OSS vérifie la signature de chaque requête POST et rejette celles dont la signature est invalide.

Remarque

OSS prend en charge l'algorithme de signature V4, plus sécurisé. Nous vous recommandons d'utiliser la signature V4. Pour plus d'informations, consultez Signature V4.

Quand utiliser une signature POST V1 ?

Les requêtes HTTP POST adressées à OSS prennent en charge l'algorithme de signature V1, appelé signature POST V1 dans cette rubrique. Avant de calculer une signature POST V1, examinez les conditions et dépendances suivantes :

  • ACL du bucket — Une requête PostObject doit comporter une signature lorsque l'ACL du bucket de destination est définie sur public-read ou private.

  • Champs de formulaire — Fournissez les champs de formulaire OSSAccessKeyId, Signature et policy ensemble. Si l'un des trois champs est présent dans le formulaire, les deux autres sont également obligatoires. Pour obtenir des descriptions détaillées des champs, consultez Champs de formulaire.

  • Emplacement du calcul de la signature — Le serveur d'application calcule la signature et la transmet, ainsi que la politique de téléchargement, au client. Le client utilise ces informations pour construire la requête PostObject.

  • Identifiants — La signature est calculée à partir de la clé secrète AccessKey. Le champ de formulaire OSSAccessKeyId contient l'ID AccessKey de la même paire de clés AccessKey.

Calculer une signature POST V1

Calculez une signature POST V1 sur votre serveur d'application en suivant les trois étapes ci-dessous :

  1. Créez la politique. Créez une politique encodée en UTF-8. Pour connaître la syntaxe de la politique et les conditions que vous pouvez déclarer, consultez Structure de la politique.

  2. Construisez la chaîne à signer (StringToSign). Encodez la politique en Base64. La chaîne résultante constitue la chaîne à signer (StringToSign).

  3. Calculez la signature. Utilisez la clé secrète AccessKey pour signer la chaîne à signer. La formule de signature est Signature = base64(hmac-sha1(AccessKeySecret,base64(policy))).

Le schéma suivant illustre le processus de calcul de la signature POST V1.

image

Exemple : calculer une signature POST V1 en Java

L'exemple Java suivant exécute les trois étapes de la signature POST V1 en utilisant la politique d'exemple décrite dans Structure de la politique. L'étape 3 appelle le SDK Java OSS, qui applique la formule base64(hmac-sha1(AccessKeySecret,base64(policy))) à la chaîne à signer.

import org.apache.commons.codec.binary.Base64;

public class Demo {
    public static void main(String[] args) {
        // Before running this code example, make sure the OSS_ACCESS_KEY_SECRET environment variable is set.
        String accessKeySecret =  System.getenv().get("OSS_ACCESS_KEY_SECRET");

        // Step 1: Create the policy.
        String policy = "{\n" +
                "  \"expiration\": \"2023-12-03T13:00:00.000Z\",\n" +
                "  \"conditions\": [\n" +
                "    {\"bucket\": \"examplebucket\"},\n" +
                "    [\"content-length-range\", 1, 10],\n" +
                "    [\"eq\", \"$success_action_status\", \"201\"],\n" +
                "    [\"starts-with\", \"$key\", \"user/eric/\"],\n" +
                "    [\"in\", \"$content-type\", [\"image/jpeg\", \"image/png\"]],\n" +
                "    [\"not-in\", \"$cache-control\", [\"no-cache\"]]\n" +
                "  ]\n" +
                "}";

        // Step 2: Construct the string to sign (StringToSign).
        String stringToSign = new String(Base64.encodeBase64(policy.getBytes()));

        // Step 3: Calculate the signature.
        String signature = com.aliyun.oss.common.auth.ServiceSignature.create().computeSignature(accessKeySecret, stringToSign);
        System.out.println("signature:" + signature);
    }
}

La signature s'affiche au format suivant. La valeur imprimée est une chaîne encodée en Base64 qui dépend de votre clé secrète AccessKey et des octets exacts de votre politique ; votre résultat diffère donc de l'exemple ci-dessous.

signature:****

Soumettez la valeur calculée dans le champ de formulaire Signature de la requête PostObject, ainsi que les champs de formulaire OSSAccessKeyId et policy.

Champs de formulaire

Les éléments de formulaire suivants sont spécifiques à la signature POST V1. Pour les autres éléments de formulaire courants, consultez Éléments de formulaire PostObject. Pour connaître les conditions dans lesquelles ces champs sont requis, consultez Quand utiliser une signature POST V1 ?.

Champ Type Description
OSSAccessKeyId String ID AccessKey de la paire de clés AccessKey. Valeur par défaut : Aucune.
Signature String Signature calculée à partir de la clé secrète AccessKey et de la politique. OSS utilise la signature pour vérifier la validité de la requête POST. La clé de ce champ de formulaire est insensible à la casse, mais la valeur est sensible à la casse. Valeur par défaut : Aucune. Pour savoir comment OSS vérifie la signature d'une requête POST, consultez PostObject.
policy String Politique de sécurité qui déclare les autorisations et les contraintes du téléchargement. La politique est définie au format JSON et doit inclure les champs expiration et conditions. Pour plus de détails, consultez Structure de la politique.

Structure de la politique

Le champ de formulaire policy est une politique de sécurité qui définit les autorisations et les contraintes pour le téléchargement d'objets vers OSS via un formulaire HTML. La politique est définie au format JSON et restreint les opérations de téléchargement grâce à plusieurs paramètres, tels que le nom du bucket autorisé, le préfixe d'objet, l'heure d'expiration, les méthodes HTTP autorisées, les limites de taille du contenu et les restrictions de type de contenu.

La politique doit inclure les champs expiration et conditions, comme illustré dans l'exemple suivant.

{
  "expiration": "2023-12-03T13:00:00.000Z",
  "conditions": [
    {"bucket": "examplebucket"},
    ["content-length-range", 1, 10],
    ["eq", "$success_action_status", "201"],
    ["starts-with", "$key", "user/eric/"],
    ["in", "$content-type", ["image/jpeg", "image/png"]],
    ["not-in", "$cache-control", ["no-cache"]]
  ]
}

La politique contient les éléments suivants :

  • expiration — Spécifie l'heure d'expiration de la politique au format ISO 8601 GMT. Par exemple, 2023-12-03T13:00:00.000Z signifie que la requête POST doit être initiée avant 13 h 00 GMT le 3 décembre 2023.

  • conditions — Spécifie les valeurs valides pour les champs de formulaire dans la requête POST.

Le tableau suivant décrit les champs que vous pouvez déclarer dans conditions.

Champ Type Obligatoire Description Modes de correspondance des conditions
bucket String Non Nom du bucket. bucket
content-length-range String Non Tailles minimale et maximale autorisées de l'objet à télécharger, en octets. content-length-range
success_action_status String Non Code d'état HTTP renvoyé après un téléchargement réussi. eq, eq-ci, starts-with, starts-with-ci, in, in-ci, not-in, not-in-ci
key String Non Nom de l'objet à télécharger. eq, eq-ci, starts-with, starts-with-ci, in, in-ci, not-in, not-in-ci
content-type String Non Restreint le type de contenu de l'objet à télécharger. eq, eq-ci, starts-with, starts-with-ci, in, in-ci, not-in, not-in-ci
cache-control String Non Spécifie le comportement de mise en cache de l'objet. eq, eq-ci, starts-with, starts-with-ci, in, in-ci, not-in, not-in-ci

Modes de correspondance des conditions

Le tableau suivant décrit les modes de correspondance des conditions que vous pouvez utiliser dans le champ conditions d'une politique POST V1.

Mode de correspondance des conditions Description
content-length-range Spécifie les tailles d'objet minimale et maximale autorisées pour les téléchargements. Par exemple, pour autoriser des tailles d'objet comprises entre 1 et 10 octets, écrivez ["content-length-range", 1, 10].
eq Effectue une correspondance exacte. La valeur du champ de formulaire doit correspondre exactement à la valeur déclarée dans les conditions. Par exemple, pour exiger que la valeur du champ de formulaire key soit a, écrivez ["eq", "$key", "a"].
starts-with Effectue une correspondance de préfixe. La valeur du champ de formulaire doit commencer par le préfixe spécifié. Par exemple, pour exiger que la valeur du champ de formulaire key commence par user/user1, écrivez ["starts-with", "$key", "user/user1"].
in Vérifie si la valeur est incluse dans une liste de chaînes spécifiée. Par exemple, lorsque vous téléchargez une image via l'opération PostObject et souhaitez autoriser plusieurs formats d'image, utilisez ["in", "$content-type", ["image/jpeg", "image/png"]].
not-in Vérifie si la valeur est exclue d'une liste de chaînes spécifiée. Par exemple, lorsque vous téléchargez un objet via l'opération PostObject et souhaitez interdire la valeur no-cache pour le comportement de cache, utilisez ["not-in", "$cache-control", ["no-cache"]].
eq-ci Effectue une correspondance exacte insensible à la casse. La valeur du champ de formulaire doit correspondre à la valeur déclarée dans les conditions. La comparaison est effectuée en minuscules. Par exemple, pour ["eq-ci", "$key", "AbC"], les noms d'objet tels que abc, ABC et aBc correspondent tous.
starts-with-ci Effectue une correspondance de préfixe insensible à la casse. La valeur du champ de formulaire doit commencer par le préfixe spécifié. La comparaison est effectuée en minuscules. Par exemple, pour ["starts-with-ci", "$key", "User/"], les valeurs commençant par user/, USER/ ou User/ correspondent toutes.
in-ci Effectue une vérification insensible à la casse pour déterminer si la valeur est incluse dans une liste de chaînes spécifiée. La comparaison est effectuée en minuscules. Par exemple, pour ["in-ci", "$content-type", ["IMAGE/JPEG", "image/PNG"]], les valeurs telles que image/jpeg et IMAGE/PNG correspondent toutes.
not-in-ci Effectue une vérification insensible à la casse pour déterminer si la valeur est exclue d'une liste de chaînes spécifiée. La comparaison est effectuée en minuscules. Par exemple, pour ["not-in-ci", "$cache-control", ["No-Cache"]], les valeurs telles que no-cache, NO-CACHE et No-Cache sont toutes exclues.

Caractères d'échappement de la politique

Dans une politique POST, le signe dollar ($) représente une variable. Pour inclure un signe dollar littéral, utilisez le caractère d'échappement \$. Le tableau suivant décrit les caractères qui doivent être échappés dans le JSON de la politique.

Caractère d'échappement Description
\/ Barre oblique
\\ Barre oblique inverse
\" Guillemet double
\$ Signe dollar
\b Espace
\f Saut de page
\n Saut de ligne
\r Retour chariot
\t Tabulation horizontale
\uxxxx Caractère Unicode