Lorsque vous envoyez des requêtes à OSS, vous devez inclure un en-tête de requête Authorization contenant une signature V4 pour garantir une authentification réussie. Privilégiez l'utilisation du SDK fourni par OSS pour envoyer vos requêtes, car le SDK intègre déjà l'algorithme de signature V4 complexe. Consultez cette documentation pour implémenter manuellement l'algorithme de signature V4 uniquement si l'utilisation du SDK n'est pas possible.
Utiliser les SDK OSS pour implémenter automatiquement les signatures V4
Si vous devez implémenter l'algorithme de signature V4, nous vous recommandons de vous inspirer de l'implémentation disponible dans les SDK OSS.
|
SDK |
Implémentation |
En-têtes de requête Authorization
Lors de l'envoi d'une requête à OSS, vous devez implémenter la signature dans l'en-tête Authorization afin de vérifier la requête.
Voici la syntaxe de l'en-tête Authorization :
Authorization: OSS4-HMAC-SHA256 Credential=<AccessKeyId>/<SignDate>/<SignRegion>/oss/aliyun_v4_request, AdditionalHeaders=<AdditionalHeadersVal>, Signature=<SignatureVal>
Le tableau ci-dessous décrit l'en-tête Authorization :
|
Composant |
Description |
|
OSS4-HMAC-SHA256 |
Spécifie l'algorithme utilisé pour calculer la signature. Cette chaîne indique la version de la signature et l'algorithme de signature (HMAC-SHA256). La valeur OSS4-HMAC-SHA256 est requise lors de l'utilisation des signatures V4 pour l'authentification. |
|
Credential |
Spécifie l'ID AccessKey et la portée, qui inclut la date, la région et le service cloud utilisés pour calculer la signature. Ce champ est requis lors de l'utilisation des signatures V4 pour l'authentification. Voici la syntaxe :
Où :
|
|
AdditionalHeaders |
Spécifiez les en-têtes de requête facultatifs inclus dans le calcul de la signature (vous n'avez pas besoin de spécifier les en-têtes obligatoires qui doivent être inclus dans le calcul de la signature). Ce champ contient uniquement des noms d'en-tête en minuscules, triés par ordre lexicographique et séparés par des points-virgules (;). Voici un exemple :
|
|
Signature |
La signature calculée. Le champ est requis lors de l'utilisation des signatures V4 pour l'authentification. L'exemple de code suivant illustre une valeur de signature de 256 bits représentée par 64 chiffres hexadécimaux en minuscules :
|
Calcul de la signature
Après avoir reçu une requête, OSS calcule la signature et la compare à celle présente dans l'en-tête de requête Authorization . Si elles correspondent, la requête aboutit. Sinon, la requête échoue.
Processus de calcul de la signature
La figure suivante illustre le processus de calcul de la signature :
Le processus de calcul de la signature comprend les trois étapes suivantes :
Construire une requête canonique : formatez la requête conformément aux spécifications de signature OSS pour générer une requête canonique.
Construire une chaîne à signer : concaténez la requête canonique pour obtenir la chaîne à signer.
Calculer la signature : effectuez plusieurs opérations de hachage sur la clé secrète AccessKey Secret pour générer une clé dérivée, puis utilisez cette clé dérivée pour calculer la chaîne à signer afin d'obtenir la signature finale. En réalisant plusieurs opérations HMAC-SHA256 sur la clé secrète AccessKey Secret, une clé dérivée sera générée pour calculer le hachage HMAC-SHA256 de la chaîne à signer, ce qui donnera la signature finale.
1. Construire une requête canonique
Voici la syntaxe d'une requête canonique :
HTTP Verb + "\n" +
Canonical URI + "\n" +
Canonical Query String + "\n" +
Canonical Headers + "\n" +
Additional Headers + "\n" +
Hashed PayLoad
Le tableau suivant décrit les paramètres d'une requête canonique :
|
Paramètre |
Description |
|
HTTP Verb |
La méthode de requête HTTP, notamment PUT, GET, POST, HEAD, DELETE et OPTIONS. |
|
Canonical URI |
Chemin de ressource encodé en URI. Le chemin de ressource n'inclut pas la chaîne de requête et l'encodage des barres obliques (
|
|
Canonical Query String |
Paramètres de requête encodés en URI et triés par ordre lexicographique.
|
|
Canonical Headers |
La liste des en-têtes de requête. Les en-têtes de requête se répartissent dans les trois catégories suivantes :
La syntaxe est la suivante :
L'exemple de code suivant illustre cette syntaxe :
|
|
Additional Headers |
Spécifie les en-têtes de requête facultatifs inclus dans le calcul de la signature (vous n'avez pas besoin de spécifier les en-têtes obligatoires qui doivent être inclus dans le calcul de la signature). Ce champ contient uniquement des noms d'en-tête en minuscules, triés par ordre lexicographique et séparés par des points-virgules (;), conformément à Spécifiez les en-têtes facultatifs inclus dans le calcul de la signature (à l'exclusion des en-têtes obligatoires) ; seuls les noms d'en-tête en minuscules sont inclus et triés par ordre lexicographique. Ils sont séparés par des points-virgules ( L'exemple de code suivant illustre cette syntaxe :
|
|
Hashed PayLoad |
La représentation hexadécimale de la valeur de hachage SHA256 de la charge utile de la requête. Seule la valeur |
2. Construire une chaîne à signer
La syntaxe de la chaîne à signer est la suivante :
"OSS4-HMAC-SHA256" + "\n" +
TimeStamp + "\n" +
Scope + "\n" +
Hex(SHA256Hash(<CanonicalRequest>))
Le tableau suivant décrit les paramètres de la chaîne à signer :
|
Paramètre |
Description |
|
OSS4-HMAC-SHA256 |
L'algorithme de hachage de la signature, la valeur doit être |
|
TimeStamp |
L'heure UTC actuelle, dont la syntaxe doit être conforme à la norme ISO8601, par exemple |
|
Scope |
L'ensemble de paramètres permettant d'obtenir/récupérer la clé dérivée. Cet ensemble de paramètres spécifie la date, la région et le service. Par conséquent, la signature calculée à l'aide de la clé dérivée n'est valide que pour la date, la région et le service spécifiés. La syntaxe est la suivante :
Description :
|
|
CanonicalRequest |
La requête canonique construite. |
3. Calculer une signature
Le calcul d'une signature implique les deux étapes suivantes :
-
Calculez la
SigningKey.DateKey = HMAC-SHA256("aliyun_v4" + SK, Date); DateRegionKey = HMAC-SHA256(DateKey, Region); DateRegionServiceKey = HMAC-SHA256(DateRegionKey, "oss"); SigningKey = HMAC-SHA256(DateRegionServiceKey, "aliyun_v4_request");SK: la clé secrète AccessKey Secret incluse dans la signature.Date: la date au formatYYYYMMDDincluse dans la signature, qui doit être cohérente avec laSignDatede la chaîne à signer.Region: l'ID de région utilisé pour la signature, par exemplecn-hangzhou, qui doit être cohérent avec laSignRegionde la chaîne à signer.
-
Calculez la
Signatureà l'aide de laSigningKeyet de la chaîne à signer.Signature = HEX(HMAC-SHA256(SigningKey, StringToSign))
Exemple de calcul de signature
L'exemple suivant montre comment calculer une signature en appelant l'opération PutObject.
Paramètres pour le calcul de la signature
|
Paramètre |
Valeur |
|
AccessKeyId |
LTAI |
|
AccessKeySecret |
yourAccessKeySecret |
|
Timestamp |
20250411T064124Z |
|
Bucket |
examplebucket |
|
Object |
exampleobject |
|
Region |
cn-hangzhou |
Exemple de calcul de signature
-
Construisez une requête canonique.
PUT /examplebucket/exampleobject content-disposition:attachment content-length:3 content-md5:ICy5YqxZB1uWSwcVLSNLcA== content-type:text/plain x-oss-content-sha256:UNSIGNED-PAYLOAD x-oss-date:20250411T064124Z content-disposition;content-length UNSIGNED-PAYLOAD -
Construisez une chaîne à signer.
OSS4-HMAC-SHA256 20250411T064124Z 20250411/cn-hangzhou/oss/aliyun_v4_request c46d96390bdbc2d739ac9363293ae9d710b14e48081fcb22cd8ad54b63136eca -
Calculez la signature.
-
Calculez la SigningKey.
RemarquePour faciliter la lecture, la
SigningKeysuivante est affichée au format hexadécimal.3543b7686e65eda71e5e5ca19d548d78423c37e8ddba4dc9d83f90228b457c76 -
Calculez la Signature.
053edbf550ebd239b32a9cdfd93b0b2b3f2d223083aa61f75e9ac16856d61f23
-