

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Autenticazione delle richieste: utilizzo dei parametri di interrogazione (AWS Signature (versione 4)
<a name="sigv4-query-string-auth"></a>

Come descritto nella panoramica sull'autenticazione (vedere[Metodi di autenticazione](sig-v4-authenticating-requests.md#auth-methods-intro)), è possibile fornire informazioni di autenticazione utilizzando i parametri della stringa di query. L'utilizzo dei parametri di interrogazione per autenticare le richieste è utile quando si desidera esprimere una richiesta interamente in un URL. Questo metodo viene anche chiamato prefirma di un URL. 

Uno scenario d'uso per gli URL prefirmati è la possibilità di concedere un accesso temporaneo alle risorse Amazon S3. Ad esempio, puoi incorporare un URL prefirmato nel tuo sito Web o, in alternativa, utilizzarlo in un client a riga di comando (come Curl) per scaricare oggetti.

**Nota**  
Puoi anche usare il AWS CLI per creare URL prefirmati. Per ulteriori informazioni, consulta [`presign`](https://docs.aws.amazon.com/cli/latest/reference/s3/presign.html) nella *documentazione di riferimento dei comandi della AWS CLI *.

Di seguito è riportato un esempio di URL prefirmato. 

 

```
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>}}
```



Nell'URL di esempio, nota quanto segue:

 
+ I feed di riga vengono aggiunti per motivi di leggibilità.
+ Il valore `X-Amz-Credential` nell'URL mostra il carattere “/” solo per leggibilità. In pratica, dovrebbe essere codificato come. `%2F` Ad esempio:

   

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

  

La tabella seguente descrive i parametri della query nell'URL che forniscono informazioni di autenticazione. 


| Nome parametro stringa di query | Valore di esempio | 
| --- | --- | 
| X-Amz-Algorithm | Identifica la versione di AWS Signature e l'algoritmo utilizzato per calcolare la firma. <br />Per la versione 4 di AWS Signature, imposti il valore di questo parametro su`AWS4-HMAC-SHA256`. Questa stringa identifica AWS la versione 4 (AWS 4) di Signature e l' HMAC-SHA256 algoritmo (HMAC-SHA256).  | 
| X-Amz-Credential | Oltre all'ID della chiave di accesso, questo parametro fornisce anche l'ambito (Regione AWS e il servizio) per cui la firma è valida. Questo valore deve corrispondere all'ambito utilizzato nei calcoli della firma, illustrato nella sezione seguente. La forma generale per questo valore di parametro è la seguente:<br /> <pre>{{<your-access-key-id>}}/{{<date>}}/{{<Regione AWS>}}/{{<AWS-service>}}/aws4_request</pre><br />Ad esempio: <br /> <pre>AKIAIOSFODNN7EXAMPLE/20130721/us-east-1/s3/aws4_request</pre><br />Per Amazon S3, la {{AWS-service}} stringa è`s3`. Per un elenco delle `AWS-region` stringhe S3, consulta [ Regioni ed endpoint ](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region) in. *Riferimenti generali di AWS* | 
| X-Amz-Date | Il formato di data e ora deve seguire lo standard ISO 8601 e deve essere formattato con il formato "{{yyyyMMdd}}T Z». {{HHmmss}} Ad esempio, se la data e l'ora erano "08/01/2016 15:32:41.982-700", devono prima essere convertite in UTC (Coordinated Universal Time) e quindi inviate come «20160801T223241Z».  | 
| X-Amz-Expires | Fornisce il periodo di tempo, in secondi, per il quale l'URL prefirmato generato è valido. Ad `86400` esempio, (24 ore). Questo valore è un numero intero. Il valore minimo che puoi impostare è 1 e il massimo è 604800 (sette giorni).<br />Un URL prefirmato può essere valido per un massimo di sette giorni perché la chiave di firma utilizzata nel calcolo della firma è valida per un massimo di sette giorni.  | 
| X-Amz-SignedHeaders | Elenca le intestazioni che hai utilizzato per calcolare la firma. Per i calcoli delle firme sono necessarie le seguenti intestazioni:<br /> +  L'`host`intestazione HTTP. <br />+  Tutte le `x-amz-*` intestazioni che intendi aggiungere alla richiesta. <br />   Per maggiore sicurezza, devi firmare tutte le intestazioni della richiesta che intendi includere nella richiesta.  | 
| X-Amz-Signature | Fornisce la firma per autenticare la richiesta. Questa firma deve corrispondere alla firma calcolata da Amazon S3; in caso contrario, Amazon S3 respinge la richiesta. Ad esempio, ` 733255ef022bec3f2a8701cd61d4b371f3f28c9f193a1f02279211d48d5193d7`<br />I calcoli delle firme sono descritti nella sezione seguente. | 
| X-Amz-Security-Token | Parametro opzionale delle credenziali se si utilizzano credenziali provenienti dal servizio STS. | 



## Calcolo di una firma
<a name="query-string-auth-v4-signing"></a>

Il diagramma seguente illustra il processo di calcolo della firma. 

 

![AWS Processo di firma versione 4 con richiesta canonica, stringa da firmare e fasi di generazione della firma.](https://docs.aws.amazon.com/it_it/AmazonS3/latest/developerguide/images/sigV4-using-query-params.png)




La tabella seguente descrive le funzioni mostrate nel diagramma. Per queste funzioni devi implementare il codice.


| Funzione | Description | 
| --- | --- | 
| Lowercase() | Converte la stringa in minuscolo. | 
| Hex() | Codifica in base 16 minuscola. | 
| SHA256Hash() | Funzione hash crittografica Secure Hash Algorithm (SHA). | 
| HMAC-SHA256() | Calcola HMAC utilizzando l'algoritmo SHA256 con la chiave di firma fornita. Questa è la firma definitiva. | 
| Trim() | Rimuove eventuali spazi bianchi all'inizio o alla fine della stringa.  | 
| UriEncode() | L'URI codifica ogni byte. UriEncode() deve applicare le seguenti regole:+  L'URI codifica ogni byte tranne i caratteri senza riserve: 'A'-'Z', 'a'-'z', '0'-'9', '-', ' . ','\_' e '\~'.  <br />+ Il carattere di spazio è un carattere riservato e deve essere codificato come "%20" (e non come "\+"). <br />+ Ogni byte codificato in URI è formato da una '%' e dal valore esadecimale a due cifre del byte. <br />+ Le lettere nel valore esadecimale devono essere maiuscole, ad esempio "%1A". <br />+ Codifica la barra, '/', ovunque tranne nel nome della chiave dell'oggetto. Ad esempio, se il nome della chiave dell'oggetto è `photos/Jan/sample.jpg`, la barra nel nome della chiave non è codificata.  Le UriEncode funzioni standard fornite dalla piattaforma di sviluppo potrebbero non funzionare a causa delle differenze di implementazione e della relativa ambiguità nelle RFC sottostanti. Ti consigliamo di scrivere una UriEncode funzione personalizzata per assicurarti che la codifica funzioni. <br />Di seguito è riportata una funzione example UriEncode () in 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> | 

Per ulteriori informazioni sul processo di firma (dettagli sulla creazione di una richiesta canonica, stringa da firmare e calcoli della firma), vedere. [Calcolo delle firme per l'intestazione di autorizzazione: trasferimento del payload in un unico blocco (AWS Signature (versione 4)](sig-v4-header-based-auth.md) Il processo è generalmente lo stesso, tranne per il fatto che la creazione di ** CanonicalRequest ** un URL prefirmato è diversa come segue:

 
+ Non includi un hash del payload nella richiesta ** canonica**, perché quando crei un URL prefirmato, non conosci il contenuto del payload perché l'URL viene utilizzato per caricare un payload arbitrario. Invece, usi una stringa costante. `UNSIGNED-PAYLOAD` 
+ La ** Canonical Query String ** deve includere tutti i parametri di query della tabella precedente ad eccezione di. `X-Amz-Signature` 
+ Per S3, è necessario includere il parametro di `X-Amz-Security-Token` query nell'URL se si utilizzano credenziali provenienti dal servizio STS.
+ **Le intestazioni canoniche devono includere l'**intestazione HTTP. `host` Se prevedi di includere una qualsiasi delle intestazioni, queste `x-amz-* ` intestazioni devono essere aggiunte anche per il calcolo della firma. Facoltativamente, puoi aggiungere tutte le altre intestazioni che intendi includere nella richiesta. Per una maggiore sicurezza, dovresti firmare quante più intestazioni possibile. Se aggiungi un'intestazione firmata che è anche un parametro di query con firma e il valore differisce, riceverai un `InvalidRequest` errore poiché l'input è in conflitto.

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

Supponiamo di avere un oggetto `test.txt` nel `examplebucket` secchio. Vuoi condividere questo oggetto con altri per un periodo di 24 ore (86400 secondi) creando un URL prefirmato. 

 

```
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>}}
```

I passaggi seguenti illustrano prima i calcoli della firma e poi la costruzione dell'URL prefirmato. L'esempio formula i seguenti presupposti aggiuntivi:

 
+ Il timestamp della richiesta è. `Fri, 24 May 2013 00:00:00 GMT`
+ Il bucket si trova nella regione Stati Uniti orientali (Virginia settentrionale) e le credenziali `Scope` e i `Signing Key` calcoli vengono utilizzati `us-east-1` come identificatori della regione.  Per ulteriori informazioni, consulta la sezione relativa a [regioni ed endpoint ](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region) nella *Riferimenti generali di AWS*. 

È possibile utilizzare questo esempio come test case per verificare la firma calcolata dal codice; tuttavia, è necessario utilizzare lo stesso nome del bucket, chiave oggetto, timestamp e le seguenti credenziali di esempio:


| Parametro | Valore | 
| --- | --- | 
| 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. 

**Firma**

    

   ```
   aeeed9bbccd4d02ee5c0109b86d86835f995330da4c265957d157751f604d404
   ```

    

   Ora hai tutte le informazioni per creare un URL prefirmato. L'URL risultante per questo esempio è mostrato come segue (puoi usarlo per confrontare il tuo URL prefirmato):

   ```
   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
   ```

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

Di seguito è riportato un esempio (non correlato all'esempio precedente) che mostra un URL prefirmato con il parametro. `X-Amz-Security-Token`

```
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>}}
```