Tous les produits
Search
Centre de documentation

:Request signatures

Dernière mise à jour :Aug 09, 2026

Chaque requête API KMS doit inclure une signature valide. Alibaba Cloud utilise cette signature pour vérifier l'identité de l'appelant, détecter toute altération des données en transit et rejeter les requêtes rejouées.

Important

Si vous utilisez un SDK ou la CLI Alibaba Cloud, la signature est gérée automatiquement. Cette rubrique s'adresse uniquement aux développeurs qui créent un client HTTP personnalisé ou effectuent des appels API bruts sans recourir à un SDK.

Fonctionnement de la signature

La signature d'une requête KMS comprend deux étapes :

  1. Construisez la chaîne à signer — Triez et encodez en pourcentage tous les paramètres de la requête pour former une chaîne de requête canonique, puis ajoutez en préfixe la méthode HTTP et une barre oblique encodée en pourcentage.

  2. Calculez la signature — Calculez un hachage HMAC-SHA1 de la chaîne à signer en utilisant votre secret AccessKey comme clé, encodez le résultat en Base64 et ajoutez-le à la requête en tant que paramètre Signature.

La formule de signature est la suivante :

Signature = Base64( HMAC-SHA1( AccessKey Secret, UTF-8-Encoding-Of(StringToSign)) )

L'URL finale de la requête présente la structure suivante :

https://<endpoint>/?Action=<operation>&SignatureVersion=1.0&SignatureMethod=HMAC-SHA1&Signature=<encoded-signature>&...

Paramètres de signature

Paramètre Valeur Description
SignatureMethod HMAC-SHA1 Algorithme de signature
SignatureVersion 1.0 Version de l'algorithme de signature
Signature <calculated> Chaîne de signature, encodée URL selon la norme RFC 3986

Fonctions requises

Pour mettre en œuvre la signature, vous avez besoin des fonctions suivantes :

Fonction Description
percentEncode() Encodage en pourcentage basé sur UTF-8 ; consultez les règles d'encodage et l'implémentation Java à l'étape 1,1
HMAC-SHA1() Fonction de hachage avec clé définie dans la RFC 2104
Base64() Encodage Base64 standard

Étape 1 : Construire la chaîne à signer

Étape 1.1 : Créer la chaîne de requête canonique

  1. Collectez tous les paramètres de la requête, à l'exception de Signature. Cela inclut les paramètres communs (tels que Action, Version, AccessKeyId, SignatureMethod, SignatureVersion, Timestamp et Format) ainsi que tous les paramètres spécifiques à l'opération.

  2. Triez les paramètres par ordre alphabétique selon leur nom.

  3. Encodez en pourcentage chaque nom et valeur de paramètre en utilisant UTF-8. Les règles d'encodage sont les suivantes :

    Cette méthode diffère de application/x-www-form-urlencoded (encodage MIME). Si vous utilisez java.net.URLEncoder de Java, appliquez d'abord l'encodage MIME, puis remplacez + par %20 , * par %2A , et %7E par ~ . La méthode percentEncode suivante implémente cette logique : `` java private static final String ENCODING = "UTF-8"; private static String percentEncode(String value) throws UnsupportedEncodingException { return value != null ? URLEncoder.encode(value, ENCODING) .replace("+", "%20") .replace("*", "%2A") .replace("%7E", "~") : null; } ``
    Type de caractère Règle d'encodage
    Lettres majuscules/minuscules, chiffres, -, _, ., ~ Aucun encodage nécessaire
    Tous les autres caractères Format %XY, où XY représente le code ASCII en hexadécimal (par exemple, " → %22)
    Caractères UTF-8 étendus Format %XY%ZA…
    Espaces %20 — n'utilisez pas +
  4. Associez chaque nom et valeur encodés avec =, puis reliez toutes les paires avec & dans l'ordre trié. Vous obtenez ainsi votre chaîne de requête canonique.

Étape 1.2 : Construire la StringToSign

Construisez la StringToSign en utilisant le format suivant :

StringToSign =
    HTTPMethod + "&" +
    percentEncode("/") + "&" +
    percentEncode(CanonicalizedQueryString)
Composant Description
HTTPMethod Méthode HTTP utilisée pour la requête, telle que GET
percentEncode("/") Barre oblique encodée en pourcentage, soit %2F
percentEncode(CanonicalizedQueryString) Chaîne de requête canonique issue de l'étape 1.1, encodée une seconde fois en pourcentage

Étape 2 : Calculer la signature

  1. Calculez le code d'authentification de message basé sur un hachage (HMAC) de la StringToSign en utilisant l'algorithme SHA1 (RFC 2104). La clé HMAC correspond à votre secret AccessKey suivi d'une esperluette (&, ASCII 38) :

    key = AccessKey Secret + "&"
  2. Encodez la sortie HMAC en Base64 pour obtenir la chaîne de signature.

  3. Encodez la chaîne de signature en URL selon la norme RFC 3986 et ajoutez-la à la requête en tant que paramètre Signature.

Exemple

L'exemple suivant illustre la signature d'une requête CreateKey.

Paramètres de la requête (avant signature)

https://kms.cn-hangzhou.aliyuncs.com/?Action=CreateKey
&SignatureVersion=1.0
&Format=json
&Version=2016-01-20
&AccessKeyId=testid
&SignatureMethod=HMAC-SHA1
&Timestamp=2016-03-28T03:13:08Z

Construction de la StringToSign

Après tri alphabétique et encodage en pourcentage, la chaîne de requête canonique est la suivante :

AccessKeyId%3Dtestid%26Action%3DCreateKey%26Format%3Djson%26SignatureMethod%3DHMAC-SHA1%26SignatureVersion%3D1.0%26Timestamp%3D2016-03-28T03%253A13%253A08Z%26Version%3D2016-01-20

La StringToSign complète est :

GET&%2F&AccessKeyId%3Dtestid%26Action%3DCreateKey%26Format%3Djson%26SignatureMethod%3DHMAC-SHA1%26SignatureVersion%3D1.0%26Timestamp%3D2016-03-28T03%253A13%253A08Z%26Version%3D2016-01-20

Chaque composant correspond à :

Composant Valeur
HTTPMethod GET
percentEncode("/") %2F
percentEncode(CanonicalizedQueryString) La chaîne encodée ci-dessus

Calcul de la signature

Entrée Valeur
AccessKey ID testid
Secret AccessKey testsecret
Clé HMAC testsecret&
Valeur de la signature 41wk2SSX1GJh7fwnc5eqOfiJPF****

URL de la requête signée

https://kms.cn-hangzhou.aliyuncs.com/?Action=CreateKey
&SignatureVersion=1.0
&Format=json
&Version=2016-01-20
&AccessKeyId=testid
&SignatureMethod=HMAC-SHA1
&Timestamp=2016-03-28T03:13:08Z
&Signature=41wk2SSX1GJh7fwnc5eqOfiJPF****