Uwierzytelnianie żądań w usłudze Azure Batch

Każde żądanie wykonywane względem usługi Batch musi zostać uwierzytelnione. Usługa Batch obsługuje uwierzytelnianie za pośrednictwem klucza wspólnego lub Tożsamość Microsoft Entra.

Uwierzytelnianie za pomocą klucza wspólnego

Uwierzytelnione żądanie wymaga dwóch nagłówków: nagłówka Date lub ocp-date i nagłówka Autoryzacja . W poniższych sekcjach opisano sposób konstruowania tych nagłówków.

Określanie nagłówka daty

Wszystkie uwierzytelnione żądania muszą zawierać znacznik czasu uniwersalnego czasu koordynowanego (UTC) dla żądania. Znacznik czasu można określić w nagłówku ocp-date lub w standardowym nagłówku daty HTTP/HTTPS. Jeśli oba nagłówki są określone dla żądania, wartość ocp-date jest używana jako czas tworzenia żądania.

Usługa Batch musi otrzymać żądanie w ciągu 15 minut od momentu jego utworzenia. Dzięki temu usługa jest chroniona przed atakami zabezpieczeń, takimi jak ataki powtarzane. Nagłówek ocp-date jest dostarczany, ponieważ niektóre biblioteki klienta HTTP i serwery proxy automatycznie ustawiają nagłówek Date i nie dają możliwości odczytania jego wartości w celu uwzględnienia jej w uwierzytelnionych żądaniach. Jeśli ustawisz wartość ocp-date, skonstruuj podpis z pustą wartością nagłówka Date .

Określanie nagłówka autoryzacji

Uwierzytelnione żądanie musi zawierać nagłówek Autoryzacja . Aby uwierzytelnić żądanie, musisz podpisać żądanie przy użyciu klucza dla konta wysyłającego żądanie i przekazać ten podpis w ramach żądania.

Format nagłówka autoryzacji jest następujący:

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

SharedKey jest nazwą schematu autoryzacji, AccountName jest nazwą konta żądającego zasobu i Signature jest opartym na skrótach kodem uwierzytelniania komunikatów (HMAC) skonstruowanym na podstawie żądania, obliczonym przy użyciu algorytmu SHA256, a następnie zakodowanym przy użyciu kodowania Base64.

W poniższych sekcjach opisano sposób konstruowania nagłówka Autoryzacja .

Konstruowanie ciągu podpisu

Podczas konstruowania ciągu podpisu należy pamiętać o następujących kwestiach:

  • Część VERB ciągu jest czasownikiem HTTP, takim jak GET lub POST, i musi mieć wielkie litery.

  • Każdy nagłówek zawarty w ciągu podpisu może pojawić się tylko raz.

  • Wartości wszystkich standardowych nagłówków HTTP muszą być uwzględnione w ciągu w kolejności wyświetlanej w formacie podpisu bez nazw nagłówków. Te nagłówki mogą być puste, jeśli nie są określone w ramach żądania; w takim przypadku wymagany jest tylko nowy znak wiersza.

  • Gdy czasownik ma wartość POST, wartości Content-Type i Content-Length są wymagane jako nagłówki żądania i jako wartości w ciągu podpisu. Typ zawartości musi być ustawiony na wartość application/json; odata=minimalmetadata.

  • Jeśli określono nagłówek ocp-date , nagłówek Date nie jest wymagany, po prostu określ pusty wiersz dla części Date ciągu podpisu. W takim przypadku postępuj zgodnie z instrukcjami w sekcji Konstruowanie kanonicznych nagłówków ciągu w celu dodania nagłówka ocp-date .

  • Wszystkie nowe znaki wiersza (\n) są wymagane w ciągu podpisu.

  • Aby uzyskać szczegółowe informacje na temat konstruowania CanonicalizedHeaders ciągów i CanonicalizedResource tworzących część ciągu podpisu, zobacz odpowiednie sekcje w dalszej części tego tematu.

Aby zakodować ciąg podpisu dla żądania względem usługi Batch, użyj następującego formatu:

  
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;  

Poniższy przykład przedstawia ciąg podpisu żądania do wyświetlenia listy zadań na koncie z limitem czasu 20 sekund. Jeśli wartość nagłówka nie istnieje, zostanie określony tylko nowy znak wiersza.

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  

Podzielenie tego wiersza po wierszu pokazuje każdą część tego samego ciągu:

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

Następnie zakoduj ten ciąg przy użyciu algorytmu HMAC-SHA256 za pośrednictwem ciągu podpisu zakodowanego w formacie UTF-8, skonstruuj nagłówek Authorization i dodaj nagłówek do żądania. W poniższym przykładzie przedstawiono nagłówek Authorization dla tej samej operacji:

Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=  

Konstruowanie ciągu nagłówków kanonicznych

Aby utworzyć CanonicalizedHeaders część ciągu podpisu, wykonaj następujące kroki:

  1. Pobierz wszystkie nagłówki zasobu rozpoczynającego się od ocp-, w tym nagłówek ocp-date .

  2. Przekonwertuj każdą nazwę nagłówka HTTP na małe litery.

  3. Sortuj nagłówki leksykograficznie według nazwy nagłówka w kolejności rosnącej. Każdy nagłówek może pojawić się tylko raz w ciągu.

  4. Zastąp wszelkie odstępy powodujące niezgodność pojedynczym spacją.

  5. Przycina wszelkie białe znaki wokół dwukropka w nagłówku.

  6. Dołącz nowy znak wiersza do każdego kanonicznego nagłówka na wyświetlonej liście. Skonstruuj CanonicalizedHeaders ciąg, łącząc wszystkie nagłówki na tej liście w jeden ciąg.

Konstruowanie kanonicznego ciągu zasobu

Część CanonicalizedResource ciągu podpisu reprezentuje zasób usługi Batch, który jest objęty żądaniem. Każda część CanonicalizedResource ciągu pochodząca z identyfikatora URI zasobu powinna być zakodowana dokładnie tak, jak w identyfikatorze URI.

Pamiętaj o następujących regułach tworzenia kanonicznego ciągu zasobu:

  • Unikaj używania nowego znaku wiersza (\n) w wartościach parametrów zapytania. Jeśli należy go użyć, upewnij się, że nie ma to wpływu na format kanonicznego ciągu zasobu.

  • Unikaj używania przecinków w wartościach parametrów zapytania.

Możesz skonstruować CanonicalizedResource ciąg w następujący sposób:

  1. Począwszy od ukośnika ("/"), po którym następuje nazwa konta będącego właścicielem zasobu, do którego uzyskuje się dostęp.

  2. Dołącz zakodowaną ścieżkę identyfikatora URI zasobu bez żadnych parametrów zapytania.

  3. Pobierz wszystkie parametry zapytania dla identyfikatora URI zasobu, w tym parametr api-version .

  4. Przekonwertuj wszystkie nazwy parametrów na małe litery.

  5. Sortuj parametry zapytania leksykograficznie według nazwy parametru w kolejności rosnącej.

  6. W adresie URL dekoduj każdą nazwę i wartość parametru zapytania.

  7. Dołącz każdą nazwę i wartość parametru zapytania do ciągu w następującym formacie, upewniając się, że zawiera dwukropek (:) między nazwą a wartością:

    parameter-name:parameter-value  
    
  8. Jeśli parametr zapytania ma więcej niż jedną wartość, posortuj wszystkie wartości leksykograficznie, a następnie uwzględnij je na liście rozdzielanej przecinkami:

    parameter-name:parameter-value-1,parameter-value-2,parameter-value-n  
    
  9. Dołącz nowy znak wiersza (\n) po każdej parze nazwa-wartość.

Kodowanie podpisu

Aby zakodować podpis, wywołaj algorytm HMAC-SHA256 w ciągu podpisu zakodowanym w formacie UTF-8 i zakoduj wynik jako Base64. Użyj następującego formatu (pokazanego jako pseudokod):

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

Uwierzytelnianie za pośrednictwem Tożsamość Microsoft Entra

Azure Batch obsługuje uwierzytelnianie przy użyciu Tożsamość Microsoft Entra, wielodostępnej usługi zarządzania katalogami i tożsamościami firmy Microsoft. Platforma Azure używa Tożsamość Microsoft Entra do uwierzytelniania własnych klientów, administratorów usług i użytkowników organizacji.

Uwaga

Uwierzytelnianie przy użyciu Tożsamość Microsoft Entra jest opcjonalne, ale zalecane, jest wymagane tylko wtedy, gdy konto usługi Batch jest skonfigurowane do przydzielania pul w subskrypcji użytkownika. Opcja alokacji puli jest dostępna podczas tworzenia nowego konta usługi Batch. Jeśli konto jest skonfigurowane do przydzielania pul w subskrypcji zarządzanej przez usługę Batch, użycie Tożsamość Microsoft Entra na potrzeby uwierzytelniania jest opcjonalne. Aby uzyskać więcej informacji, zobacz Batch — sieć wirtualna i obsługa obrazów niestandardowych dla pul maszyn wirtualnych.

Aby uzyskać ogólne informacje na temat uwierzytelniania żądania za pomocą Azure AD, zobacz Dokumentacja interfejsu API REST platformy Azure. Aby używać Azure AD z usługą Batch, potrzebne są następujące punkty końcowe.

Punkt końcowy Azure AD "wspólny" to:

https://login.microsoftonline.com/common

Punkt końcowy zasobu dla usługi Batch to:

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

Aby uzyskać dodatkowe informacje na temat rejestrowania aplikacji usługi Batch w usłudze Tożsamość Microsoft Entra, zobacz Uwierzytelnianie usług Azure Batch za pomocą Tożsamość Microsoft Entra.