Signez toutes les requêtes API pour garantir la sécurité. Alibaba Cloud utilise la signature de requête pour vérifier l'identité de l'appelant API. Chaque requête API doit contenir une signature, qu'elle soit envoyée via HTTP ou HTTPS.
Présentation
Ajoutez la signature à la requête API Resource Management au format suivant :
https://Endpoint/?SignatureVersion=1.0&SignatureMethod=HMAC-SHA1&Signature=CT9X0VtwR86fNWSnsc6v8YGOjuE%3D&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf
Les paramètres sont les suivants :
SignatureMethod : méthode de chiffrement de la chaîne de signature. Définissez la valeur sur
HMAC-SHA1.SignatureVersion : version de l'algorithme de chiffrement de la signature. Définissez la valeur sur
1.0.SignatureNonce : nombre aléatoire unique utilisé pour prévenir les attaques par rejeu. Utilisez un nombre différent pour chaque requête. Nous vous recommandons d'utiliser des identifiants universellement uniques (UUID).
Signature : chaîne de signature générée après le chiffrement symétrique de la requête à l'aide du AccessKey secret.
L'algorithme de chiffrement de la signature est conforme aux spécifications RFC 2104 HMAC-SHA1. Le AccessKey secret sert à calculer la valeur du code d'authentification de message basé sur un hachage (HMAC) de la chaîne de requête encodée et triée ; cette valeur HMAC constitue la chaîne de signature. Les signatures de requête incluent des paramètres spécifiques à l'opération. Par conséquent, la signature d'une requête varie en fonction des paramètres de la requête. Les sections suivantes expliquent comment calculer une chaîne de signature pour une requête.
Signature = Base64( HMAC-SHA1( AccessKey Secret, UTF-8-Encoding-Of(StringToSign)) )
Étape 1 : Composer et encoder une chaîne à signer
-
Créez une chaîne de requête canonique en organisant les paramètres de la requête.
-
Organisez les paramètres de la requête (y compris tous les paramètres communs et spécifiques à l'opération, à l'exception de Signature) par ordre alphabétique.
RemarqueLorsque vous utilisez la méthode GET pour envoyer une requête, ces paramètres constituent le champ de paramètres de l'URL de la requête. Ils sont placés après le point d'interrogation (?) dans l'URI de la requête et reliés par des esperluettes (&).
-
Encodez les noms et les valeurs des paramètres de requête organisés dans l'URL de la requête à l'aide du jeu de caractères UTF-8. Le tableau suivant décrit les règles d'encodage.
Caractère Règle d'encodage Lettres majuscules, lettres minuscules, chiffres, traits d'union (-), traits de soulignement (_), points (.) et tildes (~) Ces caractères n'ont pas besoin d'être encodés. Autres caractères Ces caractères doivent être encodés en pourcentage au format %XY.XYreprésente le code ASCII des caractères en notation hexadécimale. Par exemple, les guillemets doubles (") sont encodés sous la forme%22.Caractères UTF-8 étendus Ces caractères doivent être encodés au format %XY%ZA….Espaces Les espaces doivent être encodés sous la forme %20. N'encodez pas les espaces sous forme de signes plus (+).Cette méthode d'encodage diffère de l'algorithme d'encodage Multipurpose Internet Mail Extensions (MIME)application/x-www-form-urlencoded, tel que la classejava.net.URLEncoderfournie par la bibliothèque standard Java. Toutefois, vous pouvez appliquer l'algorithme d'encodage MIME, puis remplacer le signe plus (+) dans la chaîne encodée par%20, l'astérisque (*) par%2Aet%7Epar le tilde (~). Vous pouvez utiliser la méthodepercentEncodesuivante pour implémenter l'algorithme :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; } Reliez les noms et les valeurs des paramètres encodés à l'aide de signes égal (=).
Triez les paires nom-valeur de paramètres connectées dans l'ordre spécifié et reliez les paires à l'aide d'esperluettes (&) pour obtenir la chaîne de requête canonique.
-
-
Créez une chaîne à signer à partir de la chaîne de requête canonique encodée de la manière suivante :
StringToSign= HTTPMethod + "&" + percentEncode("/") + "&" + percentEncode(CanonicalizedQueryString)Les paramètres sont les suivants :
HTTPMethod : spécifie la méthode HTTP utilisée pour envoyer une requête, telle que GET.
percentEncode("/") : spécifie la valeur encodée (%2F) d'une barre oblique (/). L'encodage suit les règles d'encodage URL.
percentEncode(CanonicalizedQueryString) : spécifie la chaîne de requête canonique encodée selon les règles d'encodage URL.
Étape 2 : Calculer la chaîne de signature
-
Calculez la valeur HMAC de la chaîne à signer conformément à la norme RFC 2104.
RemarqueUtilisez l'algorithme SHA1 pour calculer la valeur HMAC de la chaîne à signer. La combinaison de votre AccessKey secret et d'une esperluette (&) (code ASCII 38) sert de clé pour le calcul HMAC.
Encodez la valeur HMAC en Base64 pour obtenir la chaîne de signature.
-
Ajoutez la chaîne de signature à la requête en tant que paramètre Signature.
RemarqueLorsque la valeur de signature obtenue est soumise en tant que valeur finale du paramètre de requête, elle doit être encodée en URL comme les autres paramètres, selon les règles définies dans
.
Exemple
Cet exemple utilise une requête CreateTrail. L'URL de la requête avant la signature est :
https://actiontrail.cn-hangzhou.aliyuncs.com/?AccessKeyId=testid&Action=CreateTrail&Format=JSON&Name=test&RegionId=cn-hangzhou&RoleName=AliyunServiceRoleForActionTrail&SignatureMethod=HMAC-SHA1&SignatureNonce=d7730860-e66f-11ea-a3a5-d5f3b52e66a1&SignatureVersion=1.0&Timestamp=2020-08-25T01%3A11%3A01Z&Version=2017-12-04
La StringToSign correspondante est :
POST&%2F&AccessKeyId%3Dtestid%26Action%3DCreateTrail%26Format%3DJSON%26Name%3Dtest%26RegionId%3Dcn-hangzhou%26RoleName%3DAliyunServiceRoleForActionTrail%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3Dd7730860-e66f-11ea-a3a5-d5f3b52e66a1%26SignatureVersion%3D1.0%26Timestamp%3D2020-08-25T01%25253A11%25253A01Z%26Version%3D2017-12-04
Par exemple, si l'AccessKey ID est testid et le AccessKey secret est testsecret, la clé utilisée pour calculer le HMAC est testsecret&.
La signature calculée est : d15sJSZ0cc+y6a6FHlWxGK/qcUA=.
L'URL de la requête signée est :
https://actiontrail.cn-hangzhou.aliyuncs.com/?Signature=d15sJSZ0cc+y6a6FHlWxGK/qcUA=&AccessKeyId=testid&Action=CreateTrail&Format=JSON&Name=test&RegionId=cn-hangzhou&RoleName=AliyunServiceRoleForActionTrail&SignatureMethod=HMAC-SHA1&SignatureNonce=d7730860-e66f-11ea-a3a5-d5f3b52e66a1&SignatureVersion=1.0&Timestamp=2020-08-25T01%3A11%3A01Z&Version=2017-12-04