

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Authentification des demandes : utilisation des paramètres de requête (AWS Signature (version 4)
<a name="sigv4-query-string-auth"></a>

Comme décrit dans la présentation de l'authentification (voir[Méthodes d'authentification](sig-v4-authenticating-requests.md#auth-methods-intro)), vous pouvez fournir des informations d'authentification à l'aide de paramètres de chaîne de requête. L'utilisation de paramètres de requête pour authentifier les demandes est utile lorsque vous souhaitez exprimer une demande entièrement dans une URL. Cette méthode est également appelée présignature d'une URL. 

Un scénario d'utilisation pour les URL présignées est que vous pouvez accorder un accès temporaire à vos ressources Amazon S3. Par exemple, vous pouvez intégrer une URL présignée sur votre site Web ou l'utiliser dans un client de ligne de commande (tel que Curl) pour télécharger des objets.

**Note**  
Vous pouvez également utiliser le AWS CLI pour créer des URL présignées. Pour plus d’informations, consultez [`presign`](https://docs.aws.amazon.com/cli/latest/reference/s3/presign.html) dans la *Référence des commandes de l’AWS CLI *.

Voici un exemple d'URL présignée. 

 

```
https://examplebucket.s3.amazonaws.com/test.txt
?X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential={{<your-access-key-id>}}/20130721/us-east-1/s3/aws4_request
&X-Amz-Date=20130721T201207Z
&X-Amz-Expires=86400
&X-Amz-SignedHeaders=host
&X-Amz-Signature={{<signature-value>}}
```



Dans l'exemple d'URL, notez ce qui suit :

 
+ Les entrées de ligne sont ajoutées pour des raisons de lisibilité.
+ La valeur `X-Amz-Credential` dans l'URL affiche le caractère « / » uniquement pour des raisons de lisibilité. En pratique, il doit être codé au format`%2F`. Par exemple :

   

  ```
  &X-Amz-Credential={{<your-access-key-id>}}%2F20130721%2Fus-east-1%2Fs3%2Faws4_request
  ```

  

Le tableau suivant décrit les paramètres de requête de l'URL qui fournissent des informations d'authentification. 


| Nom du paramètre de la chaîne d'interrogation | Exemple de valeur | 
| --- | --- | 
| X-Amz-Algorithm | Identifie la version de AWS Signature et l'algorithme que vous avez utilisé pour calculer la signature. <br />Pour AWS la version 4 de Signature, vous définissez la valeur de ce paramètre sur`AWS4-HMAC-SHA256`. Cette chaîne identifie AWS la version 4 de Signature (AWS 4) et l' HMAC-SHA256 algorithme (HMAC-SHA256).  | 
| X-Amz-Credential | Outre l'ID de votre clé d'accès, ce paramètre fournit également l'étendue (Région AWS et le service) pour lesquels la signature est valide. Cette valeur doit correspondre au champ d'application que vous utilisez dans les calculs de signature, comme indiqué dans la section suivante. Le format général de cette valeur de paramètre est le suivant :<br /> <pre>{{<your-access-key-id>}}/{{<date>}}/{{<Région AWS>}}/{{<AWS-service>}}/aws4_request</pre><br />Par exemple : <br /> <pre>AKIAIOSFODNN7EXAMPLE/20130721/us-east-1/s3/aws4_request</pre><br />Pour Amazon S3, la {{AWS-service}} chaîne est`s3`. Pour une liste des `AWS-region` chaînes S3, voir [ Régions et points de terminaison ](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region) dans le *Références générales AWS*. | 
| X-Amz-Date | Le format de date et d'heure doit respecter la norme ISO 8601 et doit être formaté avec le format « {{yyyyMMdd}} T {{HHmmss}} Z ». Par exemple, si la date et l'heure étaient « 08/01 /2016 15:32:41.982-700 », elles doivent d'abord être converties en UTC (temps universel coordonné), puis soumises sous la forme « 20160801T223241Z ».  | 
| X-Amz-Expires | Indique la période, en secondes, pendant laquelle l'URL présignée générée est valide. Par exemple, `86400` (24 heures). Cette valeur est un nombre entier. La valeur minimale que vous pouvez définir est 1 et la valeur maximale est de 604800 (sept jours).<br />Une URL pré-signée peut être valide pendant sept jours au maximum, car la clé de signature que vous utilisez pour le calcul des signatures est valide pendant sept jours au maximum.  | 
| X-Amz-SignedHeaders | Répertorie les en-têtes que vous avez utilisés pour calculer la signature. Les en-têtes suivants sont obligatoires pour les calculs de signature :<br /> +  L'`host`en-tête HTTP. <br />+  Tous `x-amz-*` les en-têtes que vous prévoyez d'ajouter à la demande. <br />   Pour plus de sécurité, vous devez signer tous les en-têtes de demande que vous prévoyez d'inclure dans votre demande.  | 
| X-Amz-Signature | Fournit la signature pour authentifier votre demande. Cette signature doit correspondre à la signature calculée par Amazon S3 ; sinon, Amazon S3 refuse la demande. Par exemple, ` 733255ef022bec3f2a8701cd61d4b371f3f28c9f193a1f02279211d48d5193d7`<br />Les calculs de signature sont décrits dans la section suivante. | 
| X-Amz-Security-Token | Paramètre d'information d'identification facultatif si vous utilisez des informations d'identification provenant du service STS. | 



## Calculer une signature
<a name="query-string-auth-v4-signing"></a>

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

 

![AWS Processus de signature Signature Version 4 avec requête canonique, chaîne à signer et étapes de génération de signature.](https://docs.aws.amazon.com/fr_fr/AmazonS3/latest/developerguide/images/sigV4-using-query-params.png)




Le tableau suivant décrit les fonctions présentées dans le schéma. Vous devez implémenter du code pour ces fonctions.


| Fonction | Description | 
| --- | --- | 
| Lowercase() | Convertit la chaîne en minuscules. | 
| Hex() | Encodage en minuscules en base 16. | 
| SHA256Hash() | Fonction de hachage cryptographique Secure Hash Algorithm (SHA, algorithme de hachage sécurisé). | 
| HMAC-SHA256() | Calcule HMAC à l'aide de l'algorithme SHA256 avec la clé de signature fournie. Il s'agit de la signature finale. | 
| Trim() | Supprimez tous les espaces blancs de début ou de fin.  | 
| UriEncode() | L'URI code chaque octet. UriEncode() doit appliquer les règles suivantes :+  L'URI encode tous les octets sauf les caractères non réservés : A-Z, a-z, 0-9, -, ., \_ et \~.  <br />+ Le caractère d'espace est un caractère réservé qui doit être codé sous la forme « %20 » (et non sous la forme « \+ »). <br />+ Chaque octet encodé par URI est formé par un « % » et la valeur hexadécimale à deux chiffres de l'octet. <br />+ Les lettres de la valeur hexadécimale doivent être en majuscules, par exemple « %1A ». <br />+ Encodez la barre oblique « / » partout sauf dans le nom de la clé de l'objet. Par exemple, si le nom de clé de l'objet est `photos/Jan/sample.jpg`, la barre oblique du nom de la clé n'est pas encodée.  Les UriEncode fonctions standard fournies par votre plateforme de développement peuvent ne pas fonctionner en raison de différences d'implémentation et de l'ambiguïté associée dans les RFC sous-jacents. Nous vous recommandons d'écrire votre propre UriEncode fonction personnalisée pour garantir le bon fonctionnement de votre encodage. <br />Voici un exemple de fonction UriEncode () en Java.<pre>public static String UriEncode(CharSequence input, boolean encodeSlash) {<br />          StringBuilder result = new StringBuilder();<br />          for (int i = 0; i < input.length(); i++) {<br />              char ch = input.charAt(i);<br />              if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9') || ch == '_' || ch == '-' || ch == '~' || ch == '.') {<br />                  result.append(ch);<br />              } else if (ch == '/') {<br />                  result.append(encodeSlash ? "%2F" : ch);<br />              } else {<br />                  result.append(toHexUTF8(ch));<br />              }<br />          }<br />          return result.toString();<br />      }</pre> | 

Pour plus d'informations sur le processus de signature (détails sur la création d'une demande canonique, chaîne à signer et calculs de signature), consultez[Calculs de signature pour l'en-tête d'autorisation : transfert de la charge utile en un seul bloc (AWS Signature (version 4)](sig-v4-header-based-auth.md). Le processus est généralement le même, sauf que la création de ** CanonicalRequest ** dans une URL présignée diffère comme suit :

 
+ Vous n'incluez pas de hachage de charge utile dans la requête ** canonique**, car lorsque vous créez une URL présignée, vous ne connaissez pas le contenu de la charge utile car l'URL est utilisée pour télécharger une charge utile arbitraire. Au lieu de cela, vous utilisez une chaîne constante`UNSIGNED-PAYLOAD`. 
+ La chaîne de requête ** canonique ** doit inclure tous les paramètres de requête du tableau précédent, à l'exception `X-Amz-Signature` de. 
+ Pour S3, vous devez inclure le paramètre de `X-Amz-Security-Token` requête dans l'URL si vous utilisez des informations d'identification provenant du service STS.
+ **Les en-têtes canoniques ** doivent inclure l'en-tête HTTP`host`. Si vous prévoyez d'inclure l'un des `x-amz-* ` en-têtes, ces en-têtes doivent également être ajoutés pour le calcul de la signature. Vous pouvez éventuellement ajouter tous les autres en-têtes que vous prévoyez d'inclure dans votre demande. Pour plus de sécurité, vous devez signer autant d'en-têtes que possible. Si vous ajoutez un en-tête signé qui est également un paramètre de requête signé et que leur valeur diffère, vous recevrez un `InvalidRequest` message d'erreur car l'entrée est en conflit.

## Un exemple
<a name="query-string-auth-v4-signing-example"></a>

Supposons que vous ayez un objet `test.txt` dans votre `examplebucket` seau. Vous souhaitez partager cet objet avec d'autres personnes pendant 24 heures (86 400 secondes) en créant une URL présignée. 

 

```
https://examplebucket.s3.amazonaws.com/test.txt
?X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request
&X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host
&X-Amz-Signature={{<signature-value>}}
```

Les étapes suivantes illustrent d'abord les calculs de signature, puis la construction de l'URL présignée. L'exemple fait les hypothèses supplémentaires suivantes :

 
+ L'horodatage de la demande est. `Fri, 24 May 2013 00:00:00 GMT`
+ Le compartiment se trouve dans la région USA Est (Virginie du Nord), et les informations d'identification `Scope` et les `Signing Key` calculs sont utilisés `us-east-1` comme spécificateur de région.  Pour de plus amples informations, veuillez consulter [Régions et points de terminaison](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region) dans le manuel *Références générales AWS*. 

Vous pouvez utiliser cet exemple comme scénario de test pour vérifier la signature calculée par votre code ; toutefois, vous devez utiliser le même nom de compartiment, la même clé d'objet, le même horodatage et les exemples d'informations d'identification suivants :


| Paramètre | Value | 
| --- | --- | 
| AWSAccessKeyId | AKIAIOSFODNN7EXAMPLE | 
| AWSSecretAccessKey | wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY | 

1. 

**StringToSign**

   1. 

**CanonicalRequest**

       

      ```
      GET
      /test.txt
      X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host
      host:examplebucket.s3.amazonaws.com
      
      host
      UNSIGNED-PAYLOAD
      ```

       

   1. 

**StringToSign**

       

      ```
      AWS4-HMAC-SHA256
      20130524T000000Z
      20130524/us-east-1/s3/aws4_request
      3bfa292879f6447bbcda7001decf97f4a54dc650c8942174ae0a9121cf58ad04
      ```

       

1. 

**SigningKey**

    

   ```
   signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "{{<YourSecretAccessKey>}}","20130524"),"us-east-1"),"s3"),"aws4_request")
   ```

    

1. 

**Signature**

    

   ```
   aeeed9bbccd4d02ee5c0109b86d86835f995330da4c265957d157751f604d404
   ```

    

   Vous disposez maintenant de toutes les informations nécessaires pour créer une URL présignée. L'URL qui en résulte pour cet exemple s'affiche comme suit (vous pouvez l'utiliser pour comparer votre URL présignée) :

   ```
   https://examplebucket.s3.amazonaws.com/test.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=aeeed9bbccd4d02ee5c0109b86d86835f995330da4c265957d157751f604d404
   ```

## Exemple 2
<a name="query-string-auth-v4-signing-example-2"></a>

L'exemple suivant (sans rapport avec l'exemple précédent) montre une URL présignée avec le `X-Amz-Security-Token` paramètre.

```
https://examplebucket.s3.us-east-1.amazonaws.com/test.txt
?X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request
&X-Amz-Date=20200524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host
&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEMv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJGMEQCIBSUbVdj9YGs2g0HkHsOHFdkwOozjARSKHL987NhhOC8AiBPepRU1obMvIbGU0T%2BWphFPgK%2Fqpxaf5Snvm5M57XFkCqlAgjz%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDQ3MjM4NTU0NDY2MCIM83pULBe5%2F%2BNm1GZBKvkBVslSaJVgwSef7SsoZCJlfJ56weYl3QCwEGr2F4BmCZZyFpmWEYzWnhNK1AnHMj5nkfKlKBx30XAT5PZGVrmq4Vkn9ewlXQy1Iu3QJRi9Tdod8Ef9%2FyajTaUGh76%2BF5u5a4O115jwultOQiKomVwO318CO4l8lv%2F3HhMOkpdanMXn%2B4PY8lvM8RgnzSu90jOUpGXEOAo%2F6G8OqlMim3%2BZmaQmasn4VYRvESEd7O72QGZ3%2BvDnDVnss0lSYjlv8PP7IujnvhZRnj0WoeOyMe1lL0wTG%2Fa9usH5hE52w%2FYUJccOn0OaZuyROuVsRV4Q70sbWQhUvYUt%2B0tUMKzm8vsFOp4BaNZFqobbjtb36Y92v%2Bx5kY6i0s8QE886jJtUWMP5ldMziClGx3p0mN5dzsYlM3GyiJ%2FO1mWkPQDwg3mtSpOA9oeeuAMPTA7qMqy9RNuTKBDSx9EW27wvPzBum3SJhEfxv48euadKgrIX3Z79ruQFSQOc9LUrDjR%2B4SoWAJqK%2BGX8Q3vPSjsLxhqhEMWd6U4TXcM7ku3gxMbzqfT8NDg%3D
&X-Amz-Signature={{<signature-value>}}
```