Creare un SAS di servizio

Una firma di accesso condiviso del servizio delega l'accesso a una risorsa in uno solo dei servizi di archiviazione, ovvero BLOB, code, tabelle o servizi file. L'URI per una firma di accesso condiviso (SAS) a livello di servizio è costituito dall'URI della risorsa per la quale la firma di accesso condiviso delegherà l'accesso, seguito dal token SAS. Il token SAS è la stringa di query che include tutte le informazioni necessarie per autorizzare una richiesta. Specifica la risorsa a cui un client può accedere, le autorizzazioni concesse e l'intervallo di tempo in cui la firma è valida. Una firma di accesso condiviso può specificare anche l'indirizzo IP o l'intervallo di indirizzi supportati da cui possono provenire le richieste, il protocollo supportato con il quale è possibile effettuare una richiesta, un identificatore facoltativo di criteri di accesso associato alla richiesta. Infine, ogni token SAS include una firma.

Attenzione

La firma di accesso condiviso è costituita da chiavi che concedono autorizzazioni alle risorse di archiviazione e devono essere protette nello stesso modo in cui si trova una chiave dell'account. È importante proteggere una firma di accesso condiviso da un utilizzo dannoso o imprevisto. Usare la discrezione per la distribuzione di una firma di accesso condiviso e un piano per la revoca di una firma di accesso condiviso compromessa. Le operazioni che usano firme di accesso condiviso devono essere eseguite solo su una connessione HTTPS e gli URI di firma di accesso condiviso devono essere distribuiti solo su una connessione sicura, ad esempio HTTPS.

Autorizzazione di una firma di accesso condiviso del servizio

Una firma di accesso condiviso del servizio è protetta usando la chiave dell'account di archiviazione. Per creare una firma di accesso condiviso del servizio, un'applicazione client deve possedere la chiave dell'account.

Per usare le credenziali di Azure AD per proteggere una firma di accesso condiviso per un contenitore o un BLOB, creare una firma di accesso condiviso di delega utente. Per altre informazioni, vedere Creare una firma di accesso condiviso di delega utente.

Supporto della firma di accesso condiviso del servizio per l'accesso con ambito directory

Una firma di accesso condiviso del servizio supporta l'ambito di directory ( sr=d ) quando la versione di autenticazione ( sv ) è 2020-02-10 o superiore ed è abilitato uno spazio dei nomi gerarchico (HNS). La semantica per l'ambito di directory ( sr=d ) è simile all'ambito del contenitore ( sr=c ), ad eccezione del fatto che l'accesso è limitato a una directory e a tutti i file e le sottodirectory sottostanti. Quando sr=d si specifica, sdd è necessario anche il parametro di query.

Il formato da stringa a segno per la versione di autenticazione 2020-02-10 è invariato.

Costruire una firma di accesso condiviso del servizio

Nella figura seguente sono rappresentate le parti dell'URI di una firma di accesso condiviso. Le parti obbligatorie sono indicate in arancione. Le sezioni successive illustrano i campi che includono il token di firma di accesso condiviso.

Elementi parametro di un URL SAS

Le sezioni seguenti descrivono come specificare i parametri che comprendono il token di firma di accesso condiviso del servizio.

Specifica del campo versione firmato

Il signedVersion sv campo () contiene la versione del servizio della firma di accesso condiviso. Questo valore specifica la versione dell'autorizzazione della chiave condivisa usata da questa firma di accesso condiviso (nel signature campo) e specifica anche la versione del servizio per le richieste effettuate con questa firma di accesso condiviso. Vedere controllo delle versioni per i servizi di archiviazione di Azure per informazioni sulla versione usata quando eseguire le richieste tramite una firma di accesso condiviso. Per informazioni dettagliate sul modo in cui questo parametro influiscono sull'autorizzazione delle richieste effettuate con una firma di accesso condiviso, vedere delega dell'accesso con una firma di accesso condiviso .

Nome del campo Query parameter (Parametro di query) Descrizione
signedVersion sv Obbligatorio. Supportato nelle versioni 2012-02-12 e successive. La versione del servizio di archiviazione da usare per autorizzare le richieste effettuate con questa firma di accesso condiviso e la versione del servizio da usare per la gestione delle richieste effettuate con questa firma di accesso condiviso. Vedere [controllo delle versioni per i servizi di archiviazione di Azure] (controllo delle versioni per-Azure-Storage-Services.md per informazioni su quale versione viene usata quando eseguire le richieste tramite una firma di accesso condiviso e come i client che eseguono la richiesta possono controllare la versione utilizzando il api-version parametro di query o l' x-ms-version intestazione.

Determinazione della versione di una richiesta di firma di accesso condiviso legacy

Negli scenari legacy in cui il parametro signedVersion non viene utilizzato, tramite il servizio BLOB vengono applicate delle regole per determinare la versione. Per ulteriori informazioni su queste regole, vedere controllo delle versioni per i servizi di archiviazione di Azure .

Importante

Nel software client potrebbe verificarsi un comportamento imprevisto del protocollo quando viene utilizzato l'URI di una firma di accesso condiviso che usa una versione del servizio di archiviazione più recente rispetto a quella del software client. Nel codice che genera gli URI delle firme di accesso condiviso è necessario utilizzare versioni riconoscibili dal software client che effettua le richieste del servizio di archiviazione.

Specifica della risorsa firmata (solo servizio BLOB)

Il signedResource campo required ( sr ) specifica quali risorse sono accessibili tramite la firma di accesso condiviso. La tabella seguente descrive come fare riferimento a un BLOB o a una risorsa contenitore nel token SAS.

Risorsa Valore del parametro Versioni supportate Descrizione
BLOB b Tutti Concede l'accesso al contenuto e ai metadati del BLOB.
Versione BLOB BV Versione 2018-11-09 e successive Concede l'accesso al contenuto e ai metadati della versione BLOB, ma non al BLOB di base.
Snapshot BLOB bs Versione 2018-11-09 e successive Concede l'accesso al contenuto e ai metadati dello snapshot del BLOB, ma non al BLOB di base.
Contenitore c Tutti Concede l'accesso al contenuto e ai metadati di qualsiasi BLOB nel contenitore e all'elenco di BLOB nel contenitore.
Directory d Versione 2020-02-10 e successive Concede l'accesso al contenuto e ai metadati di qualsiasi BLOB nella directory e all'elenco di BLOB nella directory, in un account di archiviazione con uno spazio dei nomi gerarchico abilitato. Se viene specificata una directory per il signedResource campo, signedDirectoryDepth sdd è necessario anche il parametro (). Una directory è sempre sotto un contenitore.

Specifica della risorsa firmata (servizio file)

La firma di accesso condiviso è supportata per il servizio file nella versione 2015-02-21 e successive.

Nel campo signedResource viene specificato quali risorse sono accessibili tramite la firma di accesso condiviso. Nella tabella seguente viene descritto come fare riferimento a un file o a una risorsa di condivisione nell'URI.

Nome del campo Parametro della query Descrizione
signedResource sr Obbligatorio.

Consente f di specificare se la risorsa condivisa è un file. In questo modo si concede l'accesso al contenuto e ai metadati del file.

Consente s di specificare se la risorsa condivisa è una condivisione. In questo modo si concede l'accesso al contenuto e ai metadati di qualsiasi file nella condivisione e all'elenco di directory e file nella condivisione.

Specifica dei parametri di query per eseguire l'override delle intestazioni di risposta (solo BLOB e servizi file)

Per definire valori che consentono la restituzione di determinate intestazioni della risposta quando si utilizza una firma di accesso condiviso in una richiesta, è possibile specificare tali intestazioni nei parametri di query. Questa funzionalità è supportata a partire dalla versione 2013-08-15 per il servizio BLOB e la versione 2015-02-21 per il servizio file. Le firme di accesso condiviso che usano questa funzionalità devono includere il sv parametro impostato su 2013-08-15 o versione successiva per il servizio BLOB o su 2015-02-21 o versione successiva per il servizio file.

Le intestazioni della risposta e i corrispondenti parametri di query sono i seguenti:

Nome dell'intestazione della risposta Parametro della query SAS corrispondente
Cache-Control rscc
Content-Disposition rscd
Content-Encoding rsce
Content-Language rscl
Content-Type rsct

Se ad esempio si specifica il rsct=binary parametro di query in una firma di accesso condiviso creata con la versione 2013-08-15 o successiva, l' Content-Type intestazione della risposta viene impostata su binary . Tramite questo valore, l'override del valore dell'intestazione Content-Type archiviato per il BLOB viene eseguito solo per le richieste che utilizzano la firma di accesso condiviso in questione.

Se si crea una firma di accesso condiviso che specifica le intestazioni di risposta come parametri di query, è necessario includerle nella stringa da firmare utilizzata per costruire la stringa di firma. Per altri esempi, vedere la sezione creazione della stringa di firma riportata di seguito per informazioni dettagliate e esempi di firma di accesso condiviso del servizio .

Specifica del nome della tabella (solo servizio tabelle)

Il campo tableName specifica il nome della tabella da condividere.

Nome del campo Query parameter (Parametro di query) Descrizione
tableName tn Obbligatorio. Nome della tabella da condividere.

Specifica dei criteri di accesso

La parte dell'URI relativa ai criteri di accesso indica il periodo di tempo durante il quale la firma di accesso condiviso è valida e le autorizzazioni da concedere all'utente. Nelle parti dell'URI descritte nella tabella seguente sono inclusi i criteri di accesso.

Nome del campo Query parameter (Parametro di query) Descrizione
signedStart st Facoltativa. Ora in cui la firma di accesso condiviso diventa valida, espressa in uno dei formati UTC ISO 8601 accettati. Se omesso, viene utilizzata l'ora UTC corrente come ora di inizio.

Nelle versioni precedenti alla 2012-02-12, la durata compresa tra signedStart e signedExpiry non può essere superiore a un'ora, a meno che non vengano usati criteri a livello del contenitore. Per ulteriori informazioni sui formati UTC accettati, vedere formattazione di valori DateTime.
signedExpiry se Obbligatorio. Data e ora in cui la firma di accesso condiviso diventa non valida, espressa in uno dei formati UTC ISO 8601 accettati. Questo campo deve essere omesso se è stato specificato nei criteri di accesso archiviati associati. Per ulteriori informazioni sui formati UTC accettati, vedere formattazione di valori DateTime.
signedPermissions sp Obbligatorio. Le autorizzazioni associate alla firma di accesso condiviso. L'utente può eseguire solo le operazioni consentite dalle autorizzazioni. Questo campo deve essere omesso se è stato specificato nei criteri di accesso archiviati associati.
startPk

startRk
spk

srk
Solo servizio tabelle.

Facoltativo, ma è necessario utilizzare startPk con startRk. Le chiavi di riga e di partizione minime accessibili con questa firma di accesso condiviso. I valori di chiave specificati sono inclusi nell'intervallo. Se vengono omessi, non viene impostato alcun limite inferiore per le entità della tabella a cui è possibile accedere.
endPk

endRk
epk

erk
Solo servizio tabelle.

Facoltativo, ma è necessario utilizzare endPk con endRk. Le chiavi di riga e di partizione massime accessibili con questa firma di accesso condiviso. I valori di chiave specificati sono inclusi nell'intervallo. Se vengono omessi, non viene impostato alcun limite superiore per le entità della tabella a cui è possibile accedere.

Il campo signedPermissions è obbligatorio nell'URI a meno che non sia specificato come parte dei criteri di accesso archiviati. I campi startPk, startRk, endPk e endRk possono essere specificati solo in una risorsa della tabella.

Specifica delle autorizzazioni

Le autorizzazioni specificate per il signedPermissions sp campo () nel token di firma di accesso condiviso indicano le operazioni che un client può eseguire sulla risorsa.

È possibile combinare le autorizzazioni per consentire a un client di eseguire più operazioni con la stessa firma di accesso condiviso. Quando si crea la firma di accesso condiviso, è necessario includere le autorizzazioni nell'ordine seguente:

racwdxltmeop

Esempi di impostazioni di autorizzazioni valide per un contenitore sono rw ,, rd rl , wd , wl e rl . Esempi di impostazioni non valide sono wr ,, dr lr e dw . Non è consentito specificare una designazione di autorizzazione più di una volta.

Una firma di accesso condiviso del servizio non può concedere l'accesso a determinate operazioni:

  • Non è possibile creare, eliminare o elencare i contenitori, le code e le tabelle.
  • Non è possibile leggere o scrivere i metadati e le proprietà dei contenitori.
  • Non è possibile cancellare le code, né è possibile scrivere i relativi metadati.
  • Non è possibile associare un lease ai contenitori.

Per costruire una firma di accesso condiviso che concede l'accesso a queste operazioni, usare una firma di accesso condiviso dell'account. Per altre informazioni, vedere creare una firma di accesso condiviso dell'account.

Importante

La firma di accesso condiviso è costituita da chiavi che concedono autorizzazioni alle risorse di archiviazione e devono essere protette nello stesso modo in cui si trova una chiave dell'account. Le operazioni che usano firme di accesso condiviso devono essere eseguite solo su una connessione HTTPS e gli URI di firma di accesso condiviso devono essere distribuiti solo su una connessione sicura, ad esempio HTTPS.

Le tabelle nelle sezioni seguenti illustrano le autorizzazioni supportate per ogni tipo di risorsa.

Autorizzazioni per una directory, un contenitore o un BLOB

La tabella seguente illustra le autorizzazioni supportate per ogni tipo di risorsa.

Autorizzazione Simbolo URI Risorsa Supporto versione Operazioni consentite
Lettura r Contenitore
Directory
BLOB
Tutti Leggere il contenuto, l'elenco di blocchi, le proprietà e i metadati di qualsiasi BLOB nel contenitore o nella directory. Usare un BLOB come origine di un'operazione di copia.
Add a Contenitore
Directory
BLOB
Tutti Aggiungere un blocco a un BLOB di Accodamento.
Create c Contenitore
Directory
BLOB
Tutti Scrivere un nuovo BLOB, creare uno snapshot di un BLOB o copiare un BLOB in un nuovo BLOB.
Scrittura w Contenitore
Directory
BLOB
Tutti Creazione o scrittura del contenuto, delle proprietà, dei metadati o dell'elenco dei blocchi. Creazione di snapshot o impostazione di lease del BLOB. Ridimensionamento del BLOB (solo BLOB di pagine). Usare il BLOB come destinazione di un'operazione di copia.
Elimina d Contenitore
Directory
BLOB
Tutti Eliminare un BLOB. Per la versione 2017-07-29 e successive, l'autorizzazione DELETE consente anche di suddividere un lease in un BLOB. Per ulteriori informazioni, vedere l'operazione lease BLOB .
Elimina versione x Contenitore
BLOB
Versione 2019-12-12 o successiva Eliminare una versione BLOB.
Eliminazione permanente y BLOB Versione 2020-02-10 o successiva Eliminare definitivamente una versione o uno snapshot del BLOB.
Elenco l Contenitore
Directory
Tutti Elencare i BLOB in modo non ricorsivo.
Tag u BLOB Versione 2019-12-12 o successiva Leggere o scrivere i tag in un BLOB.
Sposta m Contenitore
Directory
BLOB
Versione 2020-02-10 o successiva Spostare un BLOB o una directory e il relativo contenuto in un nuovo percorso. Questa operazione può essere facoltativamente limitata al proprietario del BLOB figlio, della directory o della directory padre se il saoid parametro è incluso nel token SAS e il bit appiccicoso è impostato sulla directory padre.
Execute h Contenitore
Directory
BLOB
Versione 2020-02-10 o successiva Ottenere le proprietà di sistema e, se lo spazio dei nomi gerarchico è abilitato per l'account di archiviazione, ottenere l'ACL POSIX di un BLOB. Se lo spazio dei nomi gerarchico è abilitato e il chiamante è il proprietario di un BLOB, questa autorizzazione concede la possibilità di impostare il gruppo proprietario, le autorizzazioni POSIX e l'ACL POSIX del BLOB. Non consente al chiamante di leggere i metadati definiti dall'utente.
Proprietario o Contenitore
Directory
BLOB
Versione 2020-02-10 o successiva Quando lo spazio dei nomi gerarchico è abilitato, questa autorizzazione consente al chiamante di impostare il proprietario o il gruppo proprietario oppure di fungere da proprietario quando si rinomina o si elimina una directory o un BLOB in una directory con il bit appiccicoso impostato.
Autorizzazioni p Contenitore
Directory
BLOB
Versione 2020-02-10 o successiva Quando lo spazio dei nomi gerarchico è abilitato, questa autorizzazione consente al chiamante di impostare le autorizzazioni e gli ACL POSIX su directory e BLOB.

Autorizzazioni per un file

Autorizzazione Simbolo URI Operazioni consentite
Lettura r Leggere il contenuto, le proprietà e i metadati. Usare il file come origine di un'operazione di copia.
Create c Consente di creare un nuovo file o di copiare un file in un nuovo file.
Scrittura w Creare o scrivere contenuto, proprietà e metadati. Ridimensionare il file. Usare il file come destinazione di un'operazione di copia.
Elimina d Eliminare il file.

Autorizzazione per una condivisione

Autorizzazione Simbolo URI Operazioni consentite
Lettura r Leggere il contenuto, le proprietà o i metadati di qualsiasi file nella condivisione. Usare qualsiasi file nella condivisione come origine di un'operazione di copia.
Create c Consente di creare un nuovo file nella condivisione o di copiare un file in un nuovo file nella condivisione.
Scrittura w Per tutti i file nella condivisione, creare o scrivere contenuto, proprietà o metadati. Ridimensionare il file. Usare il file come destinazione di un'operazione di copia. Nota: Non è possibile concedere autorizzazioni per la lettura o la scrittura di proprietà o metadati della condivisione con una firma di accesso condiviso del servizio. Usare invece una firma di accesso condiviso dell'account.
Elimina d Eliminare tutti i file nella condivisione. Nota: Non è possibile concedere autorizzazioni per eliminare una condivisione con una firma di accesso condiviso del servizio. Usare invece una firma di accesso condiviso dell'account.
Elenco l Elencare i file e le directory nella condivisione.

Autorizzazioni per una coda

Autorizzazione Simbolo URI Operazioni consentite
Lettura r Lettura dei metadati e delle proprietà, incluso il numero di messaggi. Visualizzazione dei messaggi.
Add a Aggiunta di messaggi alla coda.
Aggiornamento u Aggiornamento dei messaggi nella coda. Nota: Utilizzare l'autorizzazione elaborazione con Update in modo da ottenere prima di tutto il messaggio che si desidera aggiornare.
Processo p Recupero ed eliminazione dei messaggi dalla coda.

Autorizzazioni per una tabella

Autorizzazione Simbolo URI Operazioni consentite
Query r Recupero delle entità ed esecuzione di query sulle entità.
Add a Aggiunta di entità. Nota: Per le operazioni Upsert sono necessarie le autorizzazioni Aggiungi e aggiorna.
Aggiornamento u Aggiornamento delle entità. Nota: Per le operazioni Upsert sono necessarie le autorizzazioni Aggiungi e aggiorna.
Elimina d Eliminazione delle entità.

Specificare l'indirizzo IP o l'intervallo IP

A partire dalla versione 2015-04-05, il signedIp campo facoltativo ( sip ) specifica un indirizzo IP o un intervallo di indirizzi IP da cui accettare le richieste. Se l'indirizzo IP da cui ha origine la richiesta non corrisponde all'indirizzo IP o all'intervallo di indirizzi specificato nel token SAS, la richiesta non è autorizzata.

Quando si specifica un intervallo di indirizzi IP, si noti che l'intervallo è inclusivo. Se ad esempio si specifica o sulla firma di accesso condiviso, sip=168.1.5.65 sip=168.1.5.60-168.1.5.70 la richiesta viene limitata a tali indirizzi IP.

Importante

Una firma di accesso condiviso usata da un client che si trova nella stessa area di Azure dell'account di archiviazione potrebbe non includere un indirizzo IP in uscita pubblico per il signedIp campo. Le richieste effettuate dall'interno della stessa area usando una firma di accesso condiviso con un indirizzo IP in uscita pubblico specificato avranno esito negativo.

Specifica del protocollo HTTP

A partire dalla versione 2015-04-05, il signedProtocol campo facoltativo ( spr ) specifica il protocollo consentito per una richiesta effettuata con la firma di accesso condiviso. I valori possibili sono HTTPS e HTTP ( https,http ) o solo HTTPS ( https ). Il valore predefinito è https,http. Si noti che HTTP only non è un valore consentito.

Specifica degli intervalli di accesso alle tabelle

I campi startPk, startRk, endPk e endRk definiscono un intervallo di entità della tabella associato a una firma di accesso condiviso. Le query della tabella restituiranno solo i risultati compresi nell'intervallo; ogni tentativo di utilizzare la firma di accesso condiviso per aggiungere, aggiornare o eliminare entità al di fuori di tale intervallo avrà esito negativo. Se startPk è uguale a endPk, usando la firma di accesso condiviso sarà possibile accedere soltanto alle entità presenti in una sola partizione nella tabella. Se startPk è uguale a endPk e startRk è uguale a endRk, usando la firma di accesso condiviso sarà possibile accedere solo a una singola entità in una singola partizione. Per comprendere come questi campi limitano l'accesso alle entità in una tabella, utilizzare la tabella seguente.

Campi presenti Ambito del vincolo
startPk partitionKey >= startPk
endPk partitionKey <= endPk
startPk, startRk (partitionKey > startPk ) || (partitionKey = = startPk && rowKey >= startRk )
endPk, endRk (partitionKey < endPk ) || (partitionKey = = endPk && rowKey <= endRk )

Specificare la profondità della directory

Quando uno spazio dei nomi gerarchico è abilitato e il signedResource campo specifica una directory ( sr=d ), è necessario specificare anche signedDirectoryDepth il sdd campo () per indicare il numero di sottodirectory nella directory radice. Il valore del sdd campo deve essere un numero intero non negativo.

La directory radice, ad esempio, https://{account}.blob.core.windows.net/{container}/ ha una profondità di 0. Ogni sottodirectory sotto la directory radice aggiunge la profondità di uno. La directory https://{account}.blob.core.windows.net/{container}/d1/d2 ha una profondità di due.

Questo campo è supportato con la versione 2020-02-10 o successive.

Specifica dell'identificatore firmato

Specificando il campo signedIdentifier nell'URI, la firma di accesso condiviso specificata viene associata ai corrispondenti criteri di accesso archiviati. I criteri di accesso archiviati offrono una misura di controllo aggiuntiva su una o più firme di accesso condiviso, oltre a fornire la possibilità di revocare una firma se necessario. Ogni contenitore, coda, tabella o condivisione può avere fino a 5 criteri di accesso archiviati.

Nella tabella seguente viene descritto come fare riferimento nell'URI a un identificatore firmato.

Nome del campo Query parameter (Parametro di query) Descrizione
signedIdentifier si Facoltativa. Valore univoco con lunghezza massima di 64 caratteri correlato a criteri di accesso specificati per il contenitore, la coda o la tabella.

I criteri di accesso archiviati includono un identificatore firmato, vale a dire un valore con un massimo di 64 caratteri univoco all'interno della risorsa. Il valore di questo identificatore firmato può essere specificato tramite il campo signedidentifier nell'URI della firma di accesso condiviso. Se si specifica un identificatore firmato nell'URI è possibile associare la firma ai criteri di accesso archiviati. Per stabilire i criteri di accesso a livello di contenitore usando l'API REST, vedere delega dell'accesso con una firma di accesso condiviso.

Specifica della firma

La parte relativa alla firma dell'URI viene utilizzata per autorizzare la richiesta effettuata con la firma di accesso condiviso. Archiviazione di Azure usa uno schema di autorizzazione chiave condivisa per autorizzare una firma di accesso condiviso del servizio. Nella tabella seguente viene descritto come specificare la firma nell'URI.

Nome del campo Query parameter (Parametro di query) Descrizione
signature sig La stringa da firmare è una stringa univoca costruita in base ai campi che devono essere verificati per autorizzare la richiesta. La firma è un HMAC calcolato sulla base della stringa da firmare e della chiave mediante l'algoritmo SHA256, e quindi codificato con la codifica Base64.

Creazione della stringa di firma

Per creare la stringa di firma di una firma di accesso condiviso, è necessario innanzitutto generare la stringa da firmare dai campi inclusi nella richiesta, quindi codificare la stringa come UTF-8 e infine calcolare la firma utilizzando l'algoritmo HMAC-SHA256. Si noti che i campi inclusi nella stringa da firmare devono essere decodificati come URL.

Versione 2018-11-09 e successive

La versione 2018-11-09 aggiunge il supporto per i campi della risorsa firmata e dello snapshot del BLOB firmato. Questi devono essere inclusi nella stringa da firmare. Per costruire la stringa da firmare per le risorse del servizio BLOB, usare il formato seguente:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedIP + "\n" +  
               signedProtocol + "\n" +  
               signedVersion + "\n" +  
               signedResource + "\n"
               signedSnapshotTime + "\n" +
               rscc + "\n" +  
               rscd + "\n" +  
               rsce + "\n" +  
               rscl + "\n" +  
               rsct  
Versione 2015-04-05 e successive

Con la versione 2015-04-05 è stato aggiunto il supporto per l'IP firmato e i campi con protocollo firmato. Questi devono essere inclusi nella stringa da firmare. Per costruire la stringa da firmare per le risorse BLOB o del servizio file, usare il formato seguente:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedIP + "\n" +  
               signedProtocol + "\n" +  
               signedVersion + "\n" +  
               rscc + "\n" +  
               rscd + "\n" +  
               rsce + "\n" +  
               rscl + "\n" +  
               rsct  

Per costruire la stringa da firmare per le risorse del servizio tabelle, usare il formato seguente:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedIP + "\n" +  
               signedProtocol + "\n" +  
               signedVersion + "\n" +  
               startingPartitionKey + "\n"  
               startingRowKey + "\n"  
               endingPartitionKey + "\n"  
               endingRowKey  
  

Per costruire la stringa da firmare per Servizio di accodamento risorse, usare il formato seguente:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedIP + "\n" +  
               signedProtocol + "\n" +  
               signedVersion  
  
Dalla versione 2013-08-15 alla versione 2015-02-21

Per costruire la stringa da firmare per le risorse BLOB o del servizio file usando la versione 2013-08-15 alla versione 2015-02-21, usare il formato seguente. Si noti che per il servizio file la firma di accesso condiviso è supportata a partire dalla versione 2015-02-21.

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedVersion + "\n" +  
               rscc + "\n" +  
               rscd + "\n" +  
               rsce + "\n" +  
               rscl + "\n" +  
               rsct  

Per creare la stringa da firmare per una tabella, utilizzare il formato seguente:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedVersion + "\n" +  
               startPk + "\n" +  
               startRk + "\n" +  
               endPk + "\n" +  
               endRk  
  

Per costruire la stringa da firmare per una coda, usare il formato seguente:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedVersion 
Versione 2012-02-12

Per creare la stringa da firmare per le risorse del servizio BLOB nella versione 2012-02-12, utilizzare il seguente formato:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedVersion  
Versioni precedenti alla 2012-02-12

Per creare la stringa da firmare per le risorse del servizio BLOB nelle versioni precedenti alla 2012-02-12, utilizzare il formato seguente:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier  
  

Quando si crea la stringa da firmare, tenere presente quanto segue:

  • Se un campo è facoltativo e non è fornito come parte della richiesta, specificare una stringa vuota per il campo. Assicurarsi di includere il carattere di nuova riga (\n) dopo la stringa vuota.

  • La stringa da firmare per una tabella deve includere i parametri aggiuntivi, anche se sono stringhe vuote.

  • La parte signedpermission della stringa deve includere le designazioni delle autorizzazioni in un ordine prestabilito che è specifico per ogni tipo di risorsa. Qualsiasi combinazione di queste autorizzazioni è accettabile, ma l'ordine delle lettere delle autorizzazioni deve corrispondere a quello della tabella seguente.

    Tipo di risorsa Ordine delle autorizzazioni
    BLOB racwd
    Contenitore racwdl
    Coda raup
    File rcwd
    Condivisione rcwdl
    Tabella raud

    Esempi di impostazioni di autorizzazioni valide per un contenitore, ad esempio, sono,, rw rd rl , wd , wl e rl . Esempi di impostazioni non valide sono wr ,, dr lr e dw . Non è consentito specificare una designazione di autorizzazione più di una volta.

  • Specificare un valore per la parte signedIdentifier della stringa quando si associa la richiesta ai criteri di accesso archiviati.

  • Una firma di accesso condiviso che specifica una versione del servizio di archiviazione precedente a 2012-02-12 può condividere solo un BLOB o un contenitore e deve omettere signedVersion e la nuova riga prima di essa.

  • La parte canonicalizedResource della stringa è un percorso canonico della risorsa firmata. Deve includere il nome del servizio (BLOB, tabella, coda o file) per la versione 2015-02-21 o successiva, il nome dell'account di archiviazione e il nome della risorsa e deve essere decodificato in URL. I nomi dei BLOB devono includere il contenitore del BLOB. I nomi delle tabelle devono essere in lettere minuscole.

La stringa di risorsa in forma canonica per un contenitore, una coda, una tabella o una condivisione file deve omettere la barra finale ('/') per una firma di accesso condiviso che fornisce l'accesso a tale oggetto.

Gli esempi seguenti illustrano come costruire la canonicalizedResource parte della stringa, a seconda del tipo di risorsa.

Contenitori

Per la versione 2015-02-21 e successive:

URL = https://myaccount.blob.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  

Per le versioni precedenti alla 2015-02-21:

URL = https://myaccount.blob.core.windows.net/music
canonicalizedResource = "/myaccount/music"  

BLOB

Per la versione 2015-02-21 e successive:

URL = https://myaccount.blob.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  

Per le versioni precedenti alla 2015-02-21:

URL = https://myaccount.blob.core.windows.net/music/intro.mp3
canonicalizedResource = "/myaccount/music/intro.mp3"  

Condivisioni file

URL = https://myaccount.file.core.windows.net/music
canonicalizedResource = "/file/myaccount/music"  

File

URL = https://myaccount.file.core.windows.net/music/intro.mp3
canonicalizedResource = "/file/myaccount/music/intro.mp3"  

Code

Per la versione 2015-02-21 e successive:

URL = https://myaccount.queue.core.windows.net/thumbnails  
canonicalizedResource = "/queue/myaccount/thumbnails"  

Per le versioni precedenti alla 2015-02-21:

URL = https://myaccount.queue.core.windows.net/thumbnails  
canonicalizedResource = "/myaccount/thumbnails"  

Tabelle

Se la risorsa firmata è una tabella, assicurarsi che il nome della tabella sia minuscolo nel formato canonico.

Per la versione 2015-02-21 e successive:

URL = https://myaccount.table.core.windows.net/Employees(PartitionKey='Jeff',RowKey='Price')  
canonicalizedResource = "/table/myaccount/employees"  

Per le versioni precedenti alla 2015-02-21:

URL = https://myaccount.table.core.windows.net/Employees(PartitionKey='Jeff',RowKey='Price')  
canonicalizedResource = "/myaccount/employees"  

Durata e revoca di una firma di accesso condiviso

Con le firme di accesso condiviso è possibile concedere agli utenti i diritti di accesso alle risorse dell'account di archiviazione. Quando si pianifica di usare una firma di accesso condiviso, considerare la durata della firma di accesso condiviso e se l'applicazione potrebbe dover revocare i diritti di accesso in determinate circostanze.

SAS ad hoc rispetto ai criteri di accesso archiviati

Una firma di accesso condiviso del servizio può assumere uno dei due formati seguenti:

  • SAS ad hoc: Quando si crea una firma di accesso condiviso ad hoc, l'ora di inizio, l'ora di scadenza e le autorizzazioni per la firma di accesso condiviso vengono tutte specificate nell'URI della firma di accesso condiviso (o implicita se l'ora di inizio viene omessa). Qualsiasi tipo di firma di accesso condiviso può essere una firma di accesso condiviso ad hoc.

    È possibile gestire la durata di una firma di accesso condiviso ad hoc tramite il signedExpiry campo. Per continuare a concedere un accesso client alla risorsa dopo la scadenza, sarà necessario emettere una nuova firma. È consigliabile mantenere una durata breve per le firme di accesso condiviso. Prima della versione 2012-02-12, una firma di accesso condiviso non associata a un criterio di accesso archiviato non poteva avere un periodo attivo superiore a un'ora.

  • Firma di accesso condiviso con criteri di accesso archiviati: Un criterio di accesso archiviato è definito in un contenitore di risorse, che può essere un contenitore BLOB, una tabella, una coda o una condivisione file. I criteri di accesso archiviati possono essere usati per gestire i vincoli per una o più firme di accesso condiviso. Quando si associa una firma di accesso condiviso a un criterio di accesso archiviato, la firma di accesso condiviso eredita i vincoli — l'ora di inizio, l'ora di scadenza e le autorizzazioni — definite per i criteri di accesso archiviati.

    I criteri di accesso archiviati sono rappresentati dal campo signedIdentifier nell'URI. I criteri di accesso archiviati offrono una misura di controllo aggiuntiva su una o più firme di accesso condiviso, oltre a fornire la possibilità di revocare una firma se necessario.

Revoca di una firma di accesso condiviso

Poiché un URI di firma di accesso condiviso è un URL, qualsiasi utente che ottiene la firma può usarla, indipendentemente da chi l'ha creata originariamente. Se la firma di accesso condiviso è stata pubblicata e resa pubblica, può essere usata da chiunque in tutto il mondo. Una firma di accesso condiviso concede l'accesso alle risorse a chiunque ne disponga, fino a quando non si verifica una di queste quattro cose:

  1. Viene raggiunta l'ora di scadenza specificata in una firma di accesso condiviso ad hoc.

  2. Viene raggiunta l'ora di scadenza specificata nei criteri di accesso archiviati a cui fa riferimento la firma di accesso condiviso, se viene fatto riferimento a un criterio di accesso archiviato e se i criteri di accesso specificano un'ora di scadenza. L'ora di scadenza può essere raggiunta perché l'intervallo scade o perché il criterio di accesso archiviato è stato modificato in modo da avere un'ora di scadenza nel passato, ovvero un modo per revocare la firma di accesso condiviso.

  3. Il criterio di accesso archiviato a cui fa riferimento la firma di accesso condiviso viene eliminato, che revoca la firma di accesso condiviso. Se archiviazione di Azure non è in grado di individuare i criteri di accesso archiviati specificati nella firma di accesso condiviso, il client non è in grado di accedere alla risorsa indicata dall'URI.

    Se si ricreano i criteri di accesso archiviati con lo stesso nome del criterio eliminato, tutti i token SAS esistenti saranno nuovamente validi in base alle autorizzazioni associate a tali criteri di accesso archiviati, presupponendo che l'ora di scadenza della firma di accesso condiviso non sia stata superata. Se si intende revocare la firma di accesso condiviso, assicurarsi di usare un nome diverso per ricreare i criteri di accesso archiviati con scadenza nel futuro.

  4. La chiave dell'account utilizzata per creare la firma di accesso condiviso viene rigenerata. Se si rigenera la chiave di un account, tutti i componenti dell'applicazione che usano la chiave non verranno più autorizzati finché non saranno aggiornati in modo da usare l'altra chiave dell'account valida oppure la chiave dell'account appena rigenerata. La rigenerazione della chiave dell'account è l'unico modo per revocare immediatamente una firma di accesso condiviso ad hoc.

Importante

L'URI di una firma di accesso condiviso è associato alla chiave dell'account usata per creare la firma e ai relativi criteri di accesso archiviati (se presenti). Se non sono specificati criteri di accesso archiviati, l'unico modo per revocare una firma di accesso condiviso consiste nel modificare la chiave dell'account.

Per le procedure consigliate è consigliabile usare un criterio di accesso archiviato con una firma di accesso condiviso del servizio. Se si sceglie di non usare un criterio di accesso archiviato, assicurarsi di rispettare l'intervallo di validità della firma di accesso condiviso ad hoc. Per altre informazioni sull'associazione di una firma di accesso condiviso del servizio a un criterio di accesso archiviato, vedere definire un criterio di accesso archiviato.

Esempio di firma di accesso condiviso del servizio

L'esempio seguente illustra un URI di firma di accesso condiviso del servizio che fornisce le autorizzazioni di lettura e scrittura per un BLOB. La tabella suddivide ogni parte dell'URI:

https://myaccount.blob.core.windows.net/sascontainer/sasblob.txt?sv=2019-02-02&st=2019-04-29T22%3A18%3A26Z&se=2019-04-30T02%3A23%3A26Z&sr=b&sp=rw&sip=168.1.5.60-168.1.5.70&spr=https&sig=Z%2FRHIX5Xcg0Mq2rqI3OlWTjEg2tYkboXr1P9ZUXDtkk%3D
Nome Parte firma di accesso condiviso Descrizione
URI della risorsa https://myaccount.blob.core.windows.net/sascontainer/sasblob.txt Indirizzo del BLOB. Si noti che è vivamente consigliato l'uso di HTTPS.
Versione dei servizi di archiviazione sv=2019-02-02 Per i servizi di archiviazione della versione 2012-02-12 e successive questo parametro indica la versione da usare.
Ora di inizio st=2019-04-29T22%3A18%3A26Z Specificata nell'ora UTC. Se si desidera che la firma di accesso condiviso sia immediatamente valida, omettere l'ora di inizio.
Scadenza se=2019-04-30T02%3A23%3A26Z Specificata nell'ora UTC.
Risorsa sr=b La risorsa è un BLOB.
Autorizzazioni sp=rw Le autorizzazioni concesse dalla firma di accesso condiviso includono lettura (r) e scrittura (w).
Intervallo IP sip=168.1.5.60-168.1.5.70 Intervallo di indirizzi IP da cui verrà accettata una richiesta.
Protocollo spr=https Sono consentite solo richieste tramite HTTPS.
Firma sig=Z%2FRHIX5Xcg0Mq2rqI3OlWTjEg2tYkboXr1P9ZUXDtkk%3D Usata per autorizzare l'accesso al BLOB. La firma è un HMAC calcolato sulla base di una stringa da firmare e della chiave mediante l'algoritmo SHA256, e quindi codificato con la codifica Base64.

Vedi anche