Ověřování požadavků na Azure Batch

Každý požadavek provedený vůči službě Batch musí být ověřený. Služba Batch podporuje ověřování prostřednictvím sdíleného klíče nebo Microsoft Entra ID.

Ověřování prostřednictvím sdíleného klíče

Ověřený požadavek vyžaduje dvě hlavičky: hlavičku Date nebo OCP-date a autorizační hlavičku. Následující části popisují, jak tyto hlavičky vytvořit.

Zadejte záhlaví data.

Všechny ověřené požadavky musí obsahovat časové razítko koordinovaného univerzálního času (UTC) požadavku. Časové razítko můžete zadat buď v hlavičce ocp-date , nebo ve standardní hlavičce HTTP/HTTPS Date . Pokud jsou pro požadavek zadány obě hlavičky, použije se jako čas vytvoření požadavku hodnota ocp-date .

Služba Batch musí přijmout požadavek do 15 minut od vytvoření. Tím je služba chráněna před útoky na zabezpečení, jako jsou útoky přehrání. Hlavička ocp-date je k dispozici, protože některé klientské knihovny a proxy servery HTTP automaticky nastavují hlavičku Date a nedávají příležitost přečíst její hodnotu, abyste ji mohli zahrnout do ověřeného požadavku. Pokud nastavíte ocp-date, vytvořte podpis s prázdnou hodnotou pro hlavičku Date .

Zadejte autorizační hlavičku.

Ověřený požadavek musí obsahovat autorizační hlavičku. Chcete-li ověřit požadavek, musíte žádost podepsat klíčem pro účet, který žádost vytváří, a předat tento podpis jako součást žádosti.

Hlavička Autorizace má následující formát:

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

SharedKey je název schématu autorizace, AccountName je název účtu, který žádá o prostředek, a Signature je kód HMAC (Hash-based Message Authentication Code) vytvořený z požadavku, vypočítaný pomocí algoritmu SHA256 a pak kódovaný pomocí kódování Base64.

Následující části popisují, jak vytvořit autorizační hlavičku.

Vytvoření řetězce podpisu

Při vytváření řetězce podpisu mějte na paměti následující:

  • Část řetězce VERB je příkaz HTTP, například GET nebo POST, a musí být velká písmena.

  • Každé záhlaví zahrnuté v řetězci podpisu se může zobrazit pouze jednou.

  • Hodnoty všech standardních hlaviček HTTP musí být zahrnuty v řetězci v pořadí uvedeném ve formátu podpisu bez názvů hlaviček. Tyto hlavičky mohou být prázdné, pokud nejsou zadány jako součást požadavku; v takovém případě je vyžadován pouze znak nového řádku.

  • Pokud je sloveso POST, hodnoty Content-Type a Content-Length se vyžadují jako hlavičky požadavku a jako hodnoty v řetězci podpisu. Typ obsahu musí být nastaven na application/json; odata=minimalmetadata.

  • Pokud je zadána hlavička ocp-date , záhlaví Date není vyžadováno, stačí zadat prázdný řádek pro část Datum řetězce podpisu. V tomto případě postupujte podle pokynů v části Vytvoření řetězce kanonalizované hlavičky pro přidání hlavičkyocp-date .

  • Všechny zobrazené nové znaky řádku (\n) se vyžadují v řetězci podpisu.

  • Podrobné informace o tom, jak vytvořit CanonicalizedHeaders řetězce a CanonicalizedResource , které tvoří součást řetězce podpisu, najdete v příslušných částech dále v tomto tématu.

Pokud chcete kódovat řetězec podpisu pro požadavek na službu Batch, použijte následující formát:

  
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;  

Následující příklad ukazuje řetězec podpisu pro požadavek na výpis úloh v účtu s časovým limitem 20 sekund. Pokud hodnota záhlaví neexistuje, je zadán pouze znak nového řádku.

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  

Když rozdělíte tento řádek po řádku, zobrazí se každá část stejného řetězce:

  
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*/  

Dále tento řetězec zakódujte pomocí algoritmu HMAC-SHA256 přes řetězec podpisu s kódováním UTF-8, vytvořte hlavičku authorization a přidejte hlavičku do požadavku. Následující příklad ukazuje hlavičku Authorization pro stejnou operaci:

Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=  

Vytvoření řetězce kanonalizovaných hlaviček

Pokud chcete vytvořit CanonicalizedHeaders část řetězce podpisu, postupujte takto:

  1. Načtěte všechny hlavičky prostředku, které začínají na ocp-, včetně hlavičky ocp-date .

  2. Převeďte názvy hlaviček HTTP na malá písmena.

  3. Seřaďte záhlaví lexicograficky podle názvu záhlaví ve vzestupném pořadí. Každé záhlaví se může v řetězci zobrazit pouze jednou.

  4. Všechny způsobující prázdné znaky nahraďte jednou mezerou.

  5. Ořízněte všechny prázdné znaky kolem dvojtečky v záhlaví.

  6. Ke každému kanonizovanému záhlaví ve výsledném seznamu přidejte nový znak řádku. CanonicalizedHeaders Sestavte řetězec zřetězením všech hlaviček v tomto seznamu do jednoho řetězce.

Vytvoření kanonického řetězce prostředků

Část CanonicalizedResource řetězce podpisu představuje prostředek služby Batch, na který cílí požadavek. Jakákoli část CanonicalizedResource řetězce odvozená z identifikátoru URI prostředku by měla být zakódovaná přesně tak, jak je v identifikátoru URI.

Mějte na paměti následující pravidla pro vytvoření kanonického řetězce prostředku:

  • Nepoužívejte znak nového řádku (\n) v hodnotách parametrů dotazu. Pokud je nutné použít, ujistěte se, že nemá vliv na formát kanonizovaného řetězce prostředku.

  • Nepoužívejte čárky v hodnotách parametrů dotazu.

Řetězec můžete vytvořit CanonicalizedResource následujícím způsobem:

  1. Počínaje lomítkem (/), za kterým následuje název účtu, který vlastní prostředek, ke kterému se přistupuje.

  2. Připojte cestu URI kódovaného prostředku bez jakýchkoli parametrů dotazu.

  3. Načtěte všechny parametry dotazu pro identifikátor URI prostředku, včetně parametru api-version .

  4. Převeďte všechny názvy parametrů na malá písmena.

  5. Seřaďte parametry dotazu lexicograficky podle názvu parametru ve vzestupném pořadí.

  6. Adresa URL dekóduje název a hodnotu každého parametru dotazu.

  7. Přidejte název a hodnotu každého parametru dotazu k řetězci v následujícím formátu a nezapomeňte zahrnout dvojtečku (:) mezi názvem a hodnotou:

    parameter-name:parameter-value  
    
  8. Pokud má parametr dotazu více než jednu hodnotu, seřaďte všechny hodnoty lexicograficky a pak je zahrňte do seznamu odděleného čárkami:

    parameter-name:parameter-value-1,parameter-value-2,parameter-value-n  
    
  9. Za každou dvojici název-hodnota přidejte nový znak řádku (\n).

Kódování podpisu

Pokud chcete zakódovat podpis, zavolejte algoritmus HMAC-SHA256 v řetězci podpisu s kódováním UTF-8 a zakódujte výsledek jako Base64. Použijte následující formát (zobrazený jako pseudokód):

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

Ověřování prostřednictvím Microsoft Entra ID

Azure Batch podporuje ověřování pomocí Microsoft Entra ID, víceklientské cloudové adresářové služby Microsoftu a služby správy identit. Azure používá Microsoft Entra ID k ověřování vlastních zákazníků, správců služeb a uživatelů organizace.

Poznámka

Ověřování pomocí Microsoft Entra ID je volitelné, ale doporučuje se. Vyžaduje se jenom v případě, že je váš účet Batch nastavený tak, aby přiděloval fondy v předplatném uživatele. Možnost přidělení fondu je k dispozici při vytváření nového účtu Batch. Pokud je váš účet nastavený tak, aby přiděloval fondy v předplatném spravovaném službou Batch, je použití Microsoft Entra ID pro ověřování volitelné. Další informace najdete v tématu Batch – podpora virtuální sítě a vlastní image pro fondy virtuálních počítačů.

Obecné informace o ověřování požadavku pomocí Azure AD najdete v referenčních informacích k rozhraní Azure REST API. Pokud chcete používat Azure AD se službou Batch, budete potřebovat následující koncové body.

Běžný koncový bod Azure AD je:

https://login.microsoftonline.com/common

Koncový bod prostředku pro službu Batch je:

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

Další informace o registraci aplikace Batch v Microsoft Entra ID najdete v tématu Ověřování služeb Azure Batch pomocí Microsoft Entra ID.