Autenticare le richieste a Azure Batch

Ogni richiesta effettuata al servizio Batch deve essere autenticata. Il servizio Batch supporta l'autenticazione tramite chiave condivisa o Microsoft Entra ID.

Autenticazione tramite chiave condivisa

Una richiesta autenticata richiede due intestazioni: l'intestazione Date o ocp-date e l'intestazione Authorization . Nelle sezioni seguenti viene descritto come creare queste intestazioni.

Specificare l'Intestazione data

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

Il servizio Batch deve ricevere una richiesta entro 15 minuti da quando viene creato. In questo modo, il servizio è protetto da attacchi alla sicurezza, ad esempio attacchi di tipo replay. L'intestazione ocp-date viene fornita perché alcune librerie client HTTP e proxy impostano automaticamente l'intestazione Data e non offrono la possibilità di leggerne il valore per includerlo nella richiesta autenticata. Se si imposta ocp-date, costruire la firma con un valore vuoto per l'intestazione Date .

Specificare l'intestazione di autorizzazione

Una richiesta autenticata deve includere l'intestazione Authorization . 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 per l'intestazione Authorization è il seguente:

Authorization="SharedKey <AccountName>:<Signature>"  

SharedKey è 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, calcolato usando l'algoritmo SHA256 e quindi codificato tramite codifica Base 64.

Le sezioni seguenti descrivono come costruire l'intestazione Authorization .

Creare la stringa di firma

Quando si crea la stringa di firma, tenere presente quanto segue:

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

  • Ogni intestazione inclusa nella stringa di firma può comparire una sola volta.

  • 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.

  • Quando il verbo è POST, i valori di Content-Type e Content-Length sono necessari come intestazioni di richiesta e come valori nella stringa di firma. Content-Type deve essere impostato su application/json; odata=minimalmetadata.

  • Se viene specificata l'intestazione ocp-date , l'intestazione Date non è obbligatoria, specificare semplicemente una riga vuota per la parte Date della stringa di firma. In questo caso, seguire le istruzioni nella sezione Costruire la stringa delle intestazioni canoniche per aggiungere l'intestazione ocp-date .

  • 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 per una richiesta effettuata nel servizio Batch, usare 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;  

L'esempio seguente mostra una stringa di firma per una richiesta di elencare i processi in un account con un timeout di 20 secondi. Quando non è presente un valore dell'intestazione, viene specificato solo il carattere di nuova riga.

GET\n\n\n\n\n\n\n\n\n\n\n\nocp-date:Tue, 29 Jul 2014 21:49:13 GMT\n /myaccount/jobs\napi-version:2014-01-01.1.0\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 */  
ocp-date:Tue, 29 Jul 2014 21:49:13 GMT\n    /*CanonicalizedHeaders*/  
/myaccount/jobs\napi-version:2014-04-01.1.0\ntimeout:20    /*CanonicalizedResource*/  

Codificare quindi questa stringa usando l'algoritmo HMAC-SHA256 sulla stringa di firma con codifica UTF-8, costruire l'intestazione Authorization e aggiungere l'intestazione alla richiesta. L'esempio seguente mostra l'intestazione Authorization per la stessa operazione:

Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=  

Creare la stringa delle intestazioni in forma canonica

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

  1. Recuperare tutte le intestazioni per la risorsa che iniziano con ocp-, inclusa l'intestazione ocp-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. Ogni intestazione può comparire una sola volta nella stringa.

  4. Sostituire eventuali spazi vuoti con uno spazio singolo.

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

  6. Aggiungere un carattere di nuova riga alla fine di ogni intestazione in forma canonica nell'elenco risultante. Creare la stringa CanonicalizedHeaders concatenando tutte le intestazioni in questo elenco in una singola stringa.

Creare la stringa di risorsa in forma canonica

La parte CanonicalizedResource della stringa di firma rappresenta la risorsa del servizio Batch a cui è destinata la richiesta. Ogni parte della stringa CanonicalizedResource derivata dall'URI della risorsa deve essere codificata esattamente com'è nell'URI.

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

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

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

È possibile creare la stringa CanonicalizedResource come indicato di seguito:

  1. Iniziare con una barra ("/"), seguita dal nome dell'account proprietario della risorsa a cui viene eseguito l'accesso.

  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 api-version .

  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.

Codificare la firma

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

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

Autenticazione tramite Microsoft Entra ID

Azure Batch supporta l'autenticazione con Microsoft Entra ID, il servizio di gestione delle identità e della directory basata sul cloud multi-tenant di Microsoft. Azure usa Microsoft Entra ID per autenticare clienti, amministratori del servizio e utenti dell'organizzazione.

Nota

L'autenticazione con Microsoft Entra ID è facoltativa, ma consigliata, è necessaria solo se l'account Batch è configurato per allocare pool in una sottoscrizione utente. L'opzione di allocazione del pool è disponibile quando si crea un nuovo account Batch. Se l'account è configurato per allocare pool in una sottoscrizione gestita da Batch, l'uso di Microsoft Entra ID per l'autenticazione è facoltativo. Per altre informazioni, vedere Batch - VNet and Custom Image Support for Virtual Machine Pools .For more information, see Batch – VNet and Custom Image Support for Virtual Machine Pools.

Per informazioni generali sull'autenticazione di una richiesta con Azure AD, vedere Informazioni di riferimento sull'API REST di Azure. Per usare Azure AD con il servizio Batch, sono necessari gli endpoint seguenti.

L'endpoint "comune" dell'endpoint di Azure AD è:

https://login.microsoftonline.com/common

L'endpoint delle risorse per il servizio Batch è:

https://batch.core.windows.net/

Per altre informazioni sulla registrazione dell'applicazione Batch con Microsoft Entra ID, vedere Autenticare i servizi di Azure Batch con Microsoft Entra ID.