Esporta (0) Stampa
Espandi tutto

Autenticazione per i servizi di archiviazione di Azure

Aggiornamento: maggio 2014

Ogni richiesta effettuata in un servizio di archiviazione deve essere autenticata, a meno che la richiesta non sia relativa a una risorsa Blob o contenitore resa disponibile per l'accesso pubblico o firmato.

ImportantImportante
I servizi di archiviazione di Microsoft Azure supportano sia HTTP sia HTTPS, anche se è consigliato l'utilizzo di HTTPS.

I servizi Blob, di accodamento, tabelle e file supportano gli schemi di autenticazione Chiave condivisa seguenti a partire dalla versione 2009-09-19 (per i servizi Blob, di accodamento e tabelle) e dalla versione 2014-02-14 (per il servizio file):

  • Chiave condivisa per i servizi Blob, di accodamento e file. Utilizzare lo schema di autenticazione Chiave condivisa per effettuare richieste nei servizi Blob, di accodamento e file. L'autenticazione Chiave condivisa della versione 2009-09-19 supporta una stringa di firma più estesa per offrire una migliore sicurezza e richiede l'aggiornamento del servizio per poter eseguire l'autenticazione utilizzando questa firma più estesa.

  • Chiave condivisa per il servizio tabelle. Utilizzare lo schema di autenticazione Chiave condivisa per effettuare richieste nel servizio tabelle utilizzando l'API REST. L'autenticazione Chiave condivisa per il servizio tabelle della versione 2009-09-19 utilizza la stessa stringa di firma delle versioni precedenti del servizio tabelle.

  • Chiave condivisa versione Lite. Utilizzare lo schema di autenticazione Chiave condivisa versione Lite per effettuare richieste nei servizi Blob, di accodamento, tabelle e file.

    Per la versione 2009-09-19 dei servizi Blob e di accodamento, l'autenticazione Chiave condivisa versione Lite supporta l'utilizzo di una stringa di firma identica a quella supportata nelle versioni precedenti dei servizi di accodamento e Blob. È quindi possibile utilizzare Chiave condivisa versione Lite per effettuare richieste nei servizi Blob e di accodamento senza aggiornare la stringa di firma.

Per una richiesta autenticata sono necessarie due intestazioni: l'intestazione Date o x-ms-date e l'intestazione Authorization. Nelle sezioni seguenti viene descritto come creare queste intestazioni.

noteNota
Un contenitore o un Blob può essere reso disponibile per l'accesso pubblico impostando le autorizzazioni di un contenitore. Per altre informazioni, vedere Gestire l'accesso alle risorse di archiviazione di Azure. Un contenitore, un Blob, una coda o una tabella possono essere resi disponibili per l'accesso firmato tramite una firma di accesso condiviso, la cui autenticazione avviene attraverso un meccanismo diverso. Per informazioni dettagliate, vedere Delega dell'accesso con una firma di accesso condiviso.

Tutte le richieste autenticate devono includere il timestamp UTC (Coordinated Universal Time) per la richiesta. È possibile specificare il timestamp nell'intestazione x-ms-date o nell'intestazione Date HTTP/HTTPS standard. Se entrambe le intestazioni sono specificate nella richiesta, il valore di x-ms-date viene utilizzato come ora di creazione della richiesta.

I servizi di archiviazione garantiscono che non trascorrano più di 15 minuti prima che una richiesta raggiunga il servizio. Si tratta di una misura di sicurezza contro eventuali intrusioni, inclusi gli attacchi di tipo replay. Se questo controllo ha esito negativo, il server restituisce il codice di risposta 403 (Accesso negato).

noteNota
L'intestazione x-ms-date viene fornita perché alcuni proxy e librerie client HTTP impostano automaticamente l'intestazione Date e non offrono allo sviluppatore la possibilità di leggere il relativo valore per includerlo nella richiesta autenticata. Se si imposta x-ms-date, creare la firma con un valore vuoto per l'intestazione Date.

Una richiesta autenticata deve includere l'intestazione Authorization. Se questa intestazione non è inclusa, la richiesta è anonima e può avere esito positivo solo in un contenitore o in un Blob contrassegnato per l'accesso pubblico oppure in un contenitore, un Blob, una coda o una tabella per cui è stato specificata una firma di accesso condiviso per l'accesso delegato.

Per autenticare una richiesta, è necessario firmare la richiesta con la chiave dell'account che effettua la richiesta e passare la firma come parte della richiesta.

Il formato dell'intestazione Authorization è il seguente:

Authorization="[SharedKey|SharedKeyLite] <AccountName>:<Signature>"

dove SharedKey o SharedKeyLite è il nome dello schema di autorizzazione, AccountName è il nome dell'account che richiede la risorsa e Signature è un codice HMAC (Hash-based Message Authentication Code) creato dalla richiesta e calcolato utilizzando l'algoritmo SHA256 e codificato con Base64.

noteNota
È possibile richiedere una risorsa che risiede in un altro account, se questa risorsa è accessibile pubblicamente.

Nelle sezioni seguenti viene descritto come creare l'intestazione Authorization.

La modalità di creazione della stringa di firma dipende dal servizio e dalla versione che si desidera autenticare e dallo schema di autenticazione che si desidera utilizzare. Quando si crea una stringa di firma, tenere presente quanto segue:

  • La parte VERB della stringa è il verbo HTTP, ad esempio GET o PUT e deve essere scritta in maiuscolo.

  • Per l'autenticazione Chiave condivisa per i servizi Blob, di accodamento e file, ogni intestazione inclusa nella stringa di firma può comparire una sola volta. Se sono presenti intestazioni duplicate, il servizio restituisce il codice di stato 400 (Richiesta non valida).

  • I valori di tutte le intestazioni HTTP standard devono essere inclusi nella stringa nell'ordine indicato nel formato della firma, senza i nomi delle intestazioni. Queste intestazioni possono essere vuote se non vengono specificate come parte della richiesta. In questo caso, è obbligatorio solo il carattere di nuova riga.

  • Se l'intestazione x-ms-date è specificata, è possibile ignorare l'intestazione Date, indipendentemente dal fatto che sia o meno specificata nella richiesta e specificare semplicemente una riga vuota per la parte Date della stringa di firma. In questo caso, seguire le istruzioni riportate nella sezione Creazione dell'elemento CanonicalizedHeaders relative all'aggiunta dell'intestazione x-ms-date.

    Si noti che è accettabile specificare sia x-ms-date sia Date. In questo caso, il servizio utilizza il valore di x-ms-date.

  • Se l'intestazione x-ms-date non viene specificata, specificare l'intestazione Date nella stringa di firma, senza includere il nome dell'intestazione.

  • Tutti i caratteri di nuova riga (\n) mostrati sono obbligatori nella stringa di firma.

  • Per informazioni dettagliate sulla creazione delle stringhe CanonicalizedHeaders e CanonicalizedResource che compongono parte della stringa di firma, vedere le sezioni appropriate più avanti in questo argomento.

Per codificare la stringa di firma basata su Chiave condivisa per una richiesta nella versione 2009-09-19 o successive del servizio Blob o di accodamento e nella versione 2014-02-14 o successive del servizio file, utilizzare il formato seguente:

StringToSign = VERB + "\n" +
               Content-Encoding + "\n"
               Content-Language + "\n"
               Content-Length + "\n"
               Content-MD5 + "\n" +
               Content-Type + "\n" +
               Date + "\n" +
               If-Modified-Since + "\n"
               If-Match + "\n"
               If-None-Match + "\n"
               If-Unmodified-Since + "\n"
               Range + "\n"
               CanonicalizedHeaders + 
               CanonicalizedResource;

Nell'esempio seguente viene illustrata una stringa di firma per un'operazione Get Blob. Si noti che in assenza di un valore di intestazione, viene specificato solo il carattere di nuova riga.

GET\n\n\n\n\n\n\n\n\n\n\n\nx-ms-date:Sun, 11 Oct 2009 21:49:13 GMT\nx-ms-version:2009-09-19\n/myaccount/myaccount/mycontainer\ncomp:metadata\nrestype:container\ntimeout:20

Se lo si scompone riga per riga si mostra ogni parte della stessa stringa:


GET\n /*HTTP Verb*/
\n    /*Content-Encoding*/
\n    /*Content-Language*/
\n    /*Content-Length*/
\n    /*Content-MD5*/
\n    /*Content-Type*/
\n    /*Date*/
\n    /*If-Modified-Since */
\n    /*If-Match*/
\n    /*If-None-Match*/
\n    /*If-Unmodified-Since*/
\n    /*Range*/
x-ms-date:Sun, 11 Oct 2009 21:49:13 GMT\nx-ms-version:2009-09-19\n    /*CanonicalizedHeaders*/
/myaccount/myaccount/mycontainer\ncomp:metadata\nrestype:container\ntimeout:20    /*CanonicalizedResource*/

In seguito, codificare questa stringa utilizzando l'algoritmo HMAC-SHA256 sulla stringa di firma con codifica UTF-8, creare l'intestazione Authorization e aggiungere l'intestazione alla richiesta. Nell'esempio seguente viene illustrata intestazione Authorization per la stessa operazione:

Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=

Si noti che per utilizzare l'autenticazione Chiave condivisa con la versione 2009-09-19 dei servizi Blob e di accodamento, è necessario aggiornare il codice affinché venga utilizzata la stringa di firma estesa.

Se si preferisce eseguire la migrazione del codice alla versione 2009-09-19 dei servizi Blob e di accodamento con il numero più basso possibile di modifiche, è possibile modificare le intestazioni Authorization esistenti per utilizzare Chiave condivisa versione Lite anziché Chiave condivisa. Il formato della firma richiesto da Chiave condivisa versione Lite è identico a quello richiesto da Chiave condivisa nelle versioni dei servizi di accodamento e Blob precedenti alla 2009-09-19.

È necessario utilizzare l'autenticazione Chiave condivisa per autenticare una richiesta effettuata nel servizio tabelle se il servizio utilizza l'API REST per effettuare la richiesta. Il formato della stringa di firma per l'autenticazione Chiave condivisa nel servizio tabelle è lo stesso per tutte le versioni.

Si noti che la stringa di firma basata su Chiave condivisa per una richiesta effettuata nel servizio tabelle varia leggermente da quella per una richiesta effettuata nel servizio Blob o di accodamento perché non include la parte CanonicalizedHeaders della stringa. Inoltre, in questo caso l'intestazione Date non è mai vuota anche se la richiesta imposta l'intestazione x-ms-date. Se la richiesta imposta x-ms-date, lo stesso valore viene utilizzato come valore dell'intestazione Date.

Per codificare la stringa di firma per una richiesta nel servizio tabelle effettuata utilizzando l'API REST, utilizzare il formato seguente:

StringToSign = VERB + "\n" + 
               Content-MD5 + "\n" + 
               Content-Type + "\n" +
               Date + "\n" +
               CanonicalizedResource;

noteNota
A partire dalla versione 2009-09-19, il servizio tabelle richiede che tutte le chiamate REST includano le intestazioni DataServiceVersion e MaxDataServiceVersion. Per altre informazioni, vedere Impostazione delle intestazioni della versione di OData Data Service.

È possibile utilizzare l'autenticazione Chiave condivisa versione Lite per autenticare una richiesta effettuata nella versione 2009-09-19 dei servizi Blob e di accodamento e nella versione 2014-02-14 dei servizi file.

La stringa di firma della Chiave condivisa versione Lite è identica a quella richiesta per l'autenticazione Chiave condivisa nelle versioni dei servizi Blob e di accodamento precedenti la 2009-09-19. Se quindi si desidera trasferire il codice con il minor numero di modifiche alla versione 2009-09-19 dei servizi Blob e di accodamento, è possibile modificare il codice per l'utilizzo della Chiave condivisa versione Lite senza modificare la stringa di firma stessa. Si noti che utilizzando Chiave condivisa versione Lite, non si potrà usufruire della funzionalità di sicurezza migliorata garantita dall'autenticazione Chiave condivisa della versione 2009-09-19 dell'API.

Per codificare la stringa di firma per una richiesta effettuata nel servizio Blob o di accodamento, utilizzare il formato seguente:

StringToSign = VERB + "\n" +
               Content-MD5 + "\n" +
               Content-Type + "\n" +
               Date + "\n" +
               CanonicalizedHeaders + 
               CanonicalizedResource;

Nell'esempio seguente viene illustrata una stringa di firma per un'operazione Put Blob. Si noti che la riga dell'intestazione Content-MD5 è vuota. Le intestazioni visualizzate nella stringa sono coppie nome-valore che specificano valori di metadati personalizzati per il nuovo Blob.

PUT\n\ntext/plain; charset=UTF-8\n\nx-ms-date:Sun, 20 Sep 2009 20:36:40 GMT\nx-ms-meta-m1:v1\nx-ms-meta-m2:v2\n/testaccount1/mycontainer/hello.txt

In seguito, codificare questa stringa utilizzando l'algoritmo HMAC-SHA256 sulla stringa di firma con codifica UTF-8, creare l'intestazione Authorization e aggiungere l'intestazione alla richiesta. Nell'esempio seguente viene illustrata intestazione Authorization per la stessa operazione:

Authorization: SharedKeyLite myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=

È possibile utilizzare l'autenticazione Chiave condivisa versione Lite per autenticare una richiesta effettuata in una qualsiasi versione del servizio tabelle.

Per codificare la stringa di firma per una richiesta nel servizio tabelle effettuata utilizzando Chiave condivisa versione Lite, utilizzare il formato seguente:

StringToSign = Date + "\n" 
               CanonicalizedResource

Nell'esempio seguente viene illustrata una stringa di firma per un'operazione Create Table.

Sun, 11 Oct 2009 19:52:39 GMT\n/testaccount1/Tables

In seguito, codificare questa stringa utilizzando l'algoritmo HMAC-SHA256, creare l'intestazione Authorization e aggiungere l'intestazione alla richiesta. Nell'esempio seguente viene illustrata intestazione Authorization per la stessa operazione:

Authorization: SharedKeyLite testaccount1:uay+rilMVayH/SVI8X+a3fL8k/NxCnIePdyZSkqvydM=

Per creare la parte CanonicalizedHeaders della stringa di firma, effettuare le operazioni seguenti:

  1. Recuperare tutte le intestazioni per la risorsa che iniziano con x-ms-, inclusa l'intestazione x-ms-date.

  2. Scrivere tutti i nomi delle intestazioni HTTP in caratteri minuscoli.

  3. Ordinare le intestazioni in modo lessicografico per nome di intestazione, in ordine crescente. Si noti che ogni intestazione può comparire una sola volta nella stringa.

  4. Espandere la stringa sostituendo eventuali spazi vuoti con uno spazio singolo.

  5. Rimuovere eventuali spazi vuoti intorno ai due punti nell'intestazione.

  6. Infine, aggiungere un carattere di nuova riga a ogni intestazione in forma canonica nell'elenco risultante. Creare la stringa CanonicalizedHeaders concatenando tutte le intestazioni in questo elenco in una singola stringa.

La parte CanonicalizedResource della stringa di firma rappresenta la risorsa dei servizi di archiviazione a cui è destinata la richiesta. Tutte le parti della stringa CanonicalizedResource che derivano dall'URI della risorsa devono essere codificate esattamente come nell'URI.

Due sono i formati supportati per la stringa CanonicalizedResource:

  • Un formato che supporta l'autenticazione Chiave condivisa per la versione 2009-09-19 dei servizi Blob e di accodamento e per la versione 2014-02-14 del servizio file.

  • Un formato che supporta l'autenticazione Chiave condivisa e quella basata sulla versione Lite della Chiave condivisa per tutte le versioni del servizio tabelle e la versione Lite della Chiave condivisa per la versione 2009-09-19 dei servizi di accodamento e Blob. Questo formato è identico a quello utilizzato con le versioni precedenti dei servizi di archiviazione.

Per informazioni sulla creazione dell'URI per la risorsa a cui si accede, vedere uno degli argomenti seguenti:

noteNota
Se l'autenticazione viene effettuata nell'emulatore di archiviazione, il nome dell'account viene visualizzato due volte nella stringa CanonicalizedResource. Tale comportamento è previsto. Se l'autenticazione viene effettuata per i servizi di archiviazione di Azure, il nome dell'account verrà visualizzato solo una volta nella stringa CanonicalizedResource.

Versione 2009-09-19 del formato della chiave condivisa

Questo formato supporta l'autenticazione Chiave condivisa per la versione 2009-09-19 dei servizi Blob e di accodamento e per la versione 2014-02-14 dei servizi file. Creare la stringa CanonicalizedResource nel formato seguente:

  1. Da una stringa vuota (""), aggiungere una barra (/), seguita dal nome dell'account proprietario della risorsa a cui si desidera accedere.

  2. Aggiungere il percorso URI codificato della risorsa, senza parametri di query.

  3. Recuperare tutti i parametri di query nell'URI della risorsa, incluso il parametro comp se esistente.

  4. Scrivere tutti i nomi dei parametri in caratteri minuscoli.

  5. Ordinare i parametri di query in modo lessicografico per nome di parametro, in ordine crescente.

  6. Decodificare come URL il nome e il valore di ogni parametro di query.

  7. Aggiungere il nome e il valore di ogni parametro di query alla stringa nel formato seguente, assicurandosi di includere due punti (:) tra il nome e il valore:

    parameter-name:parameter-value

  8. Se un parametro di query presenta più di un valore, ordinare tutti i valori in modo lessicografico, quindi includerli in un elenco separato da virgole:

    parameter-name:parameter-value-1,parameter-value-2,parameter-value-n

  9. Aggiungere un carattere di nuova riga (\n) dopo ogni coppia nome-valore.

Tenere presente le seguenti regole per la creazione della stringa di risorsa in forma canonica:

  • Evitare di utilizzare il carattere di nuova riga (\n) nei valori per i parametri di query. Se è necessario utilizzarlo, assicurarsi che non influisca sul formato della stringa di risorsa in forma canonica.

  • Evitare di utilizzare virgole nei valori dei parametri di query.

Di seguito sono riportati alcuni esempi che illustrano la parte CanonicalizedResource della stringa di firma, come può essere creata da un URI di richiesta specificato:


Get Container Metadata
   GET http://myaccount.blob.core.windows.net/mycontainer?restype=container&comp=metadata 
CanonicalizedResource:
    /myaccount/mycontainer\ncomp:metadata\nrestype:container

List Blobs operation:
    GET http://myaccount.blob.core.windows.net/container?restype=container&comp=list&include=snapshots&include=metadata&include=uncommittedblobs
CanonicalizedResource:
    /myaccount/mycontainer\ncomp:list\ninclude:metadata,snapshots,uncommittedblobs\nrestype:container

Versione 2009-09-19 del formato del servizio tabelle e della versione Lite della Chiave condivisa

Questo formato supporta l'autenticazione Chiave condivisa e Chiave condivisa versione Lite per tutte le versioni del servizio tabelle e Chiave condivisa versione Lite per la versione 2009-09-19 dei servizi Blob e di accodamento e per la versione 2014-02-14 del servizio file. Questo formato è identico a quello utilizzato con le versioni precedenti dei servizi di archiviazione. Creare la stringa CanonicalizedResource nel formato seguente:

  1. Da una stringa vuota (""), aggiungere una barra (/), seguita dal nome dell'account proprietario della risorsa a cui si desidera accedere.

  2. Aggiungere il percorso URI codificato della risorsa. Se l'URI della richiesta indirizza un componente della risorsa, aggiungere la stringa di query appropriata. La stringa di query deve includere il punto interrogativo e il parametro comp, ad esempio ?comp=metadata. Nessun altro parametro deve essere incluso nella stringa di query.

Per codificare la firma, chiamare l'algoritmo HMAC-SHA256 nella stringa di firma con codifica UTF-8 e codificare il risultato come Base 64. Utilizzare il formato seguente (indicato come pseudocodice):

Signature=Base64(HMAC-SHA256(UTF8(StringToSign)))

Vedere anche

Mostra:
© 2014 Microsoft