Authentifizieren von Anforderungen an Azure Batch

Jede Anforderung, die für den Batchdienst vorgenommen wird, muss authentifiziert werden. Der Batch-Dienst unterstützt die Authentifizierung entweder über gemeinsam genutzten Schlüssel oder Microsoft Entra ID.

Authentifizierung über gemeinsam genutzten Schlüssel

Eine authentifizierte Anforderung erfordert zwei Header: den Header Date oder ocp-date und den Autorisierungsheader . In den folgenden Abschnitten wird beschrieben, wie diese Header erstellt werden.

Angeben des Datumsheaders

Alle authentifizierten Anforderungen müssen den UTC-Zeitstempel (Coordinated Universal Time, koordinierte Weltzeit) für die Anforderung enthalten. Sie können den Zeitstempel entweder im ocp-date-Header oder im HTTP/ HTTPS-Standardheader Date angeben. Wenn beide Header für die Anforderung angegeben sind, wird der Wert von ocp-date als Erstellungszeit der Anforderung verwendet.

Der Batchdienst muss eine Anforderung innerhalb von 15 Minuten nach ihrer Erstellung empfangen. Auf diese Weise wird der Dienst vor Sicherheitsangriffen (z. B. Replay-Angriffen) geschützt. Der ocp-date-Header wird bereitgestellt, da einige HTTP-Clientbibliotheken und Proxys den Date-Header automatisch festlegen und Ihnen keine Möglichkeit geben, den Wert zu lesen, um ihn in die authentifizierte Anforderung aufzunehmen. Wenn Sie ocp-date festlegen, erstellen Sie die Signatur mit einem leeren Wert für den Date-Header .

Angeben des Autorisierungsheaders

Eine authentifizierte Anforderung muss den Autorisierungsheader enthalten. Um eine Anforderung zu authentifizieren, müssen Sie die Anforderung mit dem Schlüssel für das Konto signieren, das die Anforderung ausführt, und diese Signatur als Teil der Anforderung übergeben.

Das Format für den Autorisierungsheader lautet wie folgt:

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

SharedKey ist der Name des Autorisierungsschemas, AccountName ist der Name des Kontos, das die Ressource anfordert, und Signature ist ein hashbasierter Nachrichtenauthentifizierungscode (HMAC), der aus der Anforderung generiert, mit dem SHA256-Algorithmus berechnet und dann mithilfe von Base64-Codierung codiert wird.

In den folgenden Abschnitten wird beschrieben, wie der Autorisierungsheader erstellt wird.

Erstellen der Signaturzeichenfolge

Beachten Sie beim Erstellen der Signaturzeichenfolge Folgendes:

  • Der VERB-Teil der Zeichenfolge ist das HTTP-Verb, z. B. GET oder POST. Für dieses muss Großschreibung verwendet werden.

  • Jeder in der Signaturzeichenfolge enthaltene Header darf nur ein Mal verwendet werden.

  • Die Werte aller HTTP-Standardheader müssen in der Zeichenfolge ohne die Headernamen in der Reihenfolge enthalten sein, die im Signaturformat aufgeführt wird. Diese Header sind möglicherweise leer, wenn sie nicht als Teil der Anforderung angegeben werden. In diesem Fall ist nur das Neue-Zeile-Zeichen erforderlich.

  • Wenn das Verb POST ist, sind die Werte Content-Type und Content-Length als Anforderungsheader und als Werte in der Signaturzeichenfolge erforderlich. Content-Type muss auf application/json festgelegt werden; odata=minimalmetadata.

  • Wenn der ocp-date-Header angegeben ist, ist der Date-Header nicht erforderlich. Geben Sie einfach eine leere Zeile für den Date-Teil der Signaturzeichenfolge an. Befolgen Sie in diesem Fall die Anweisungen im Abschnitt Erstellen der kanonisierten Headerzeichenfolge zum Hinzufügen des ocp-date-Headers .

  • Alle angezeigten Neue-Zeile-Zeichen (\n) sind innerhalb der Signaturzeichenfolge erforderlich.

  • Weitere Informationen zum Generieren der CanonicalizedHeaders- und der CanonicalizedResource-Zeichenfolge, die Teil der Signaturzeichenfolge sind, finden Sie in den entsprechenden Abschnitten weiter unten in diesem Thema.

Verwenden Sie zum Codieren der Signaturzeichenfolge für eine Anforderung für den Batchdienst das folgende Format:

  
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;  

Das folgende Beispiel zeigt eine Signaturzeichenfolge für eine Anforderung zum Auflisten der Aufträge in einem Konto mit einem Timeout von 20 Sekunden. Wenn kein Headerwert vorhanden ist, wird nur das Neu-Zeile-Zeichen angegeben.

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  

In der detaillierten Anzeige der einzelnen Zeilen wird jeder Teil derselben Zeichenfolge aufgeführt:

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

Codieren Sie als Nächstes diese Zeichenfolge mithilfe des HMAC-SHA256-Algorithmus über die UTF-8-codierte Signaturzeichenfolge, erstellen Sie den Autorisierungsheader , und fügen Sie den Header der Anforderung hinzu. Das folgende Beispiel zeigt den Autorisierungsheader für denselben Vorgang:

Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=  

Generieren der Zeichenfolge für vereinheitlichte Header

Führen Sie zum Erstellen des CanonicalizedHeaders-Teils der Signaturzeichenfolge folgende Schritte aus:

  1. Ruft alle Header für die Ressource ab, die mit ocp- beginnen, einschließlich des ocp-date-Headers .

  2. Konvertieren Sie alle HTTP-Headernamen in Kleinbuchstaben.

  3. Sortieren Sie die Header lexikografisch und in aufsteigender Reihenfolge nach Headernamen. Jeder Header darf nur ein Mal in der Zeichenfolge vorhanden sein.

  4. Ersetzen Sie alle geschützten Leerzeichen durch ein einzelnes Leerzeichen.

  5. Entfernen Sie alle Leerräume um den Doppelpunkt im Header.

  6. Fügen Sie an jeden vereinheitlichten Header in der sich ergebenden Liste ein Neue-Zeile-Zeichen an. Erstellen Sie die CanonicalizedHeaders-Zeichenfolge, indem Sie alle Header in dieser Liste zu einer einzelnen Zeichenfolge verketten.

Generieren der Zeichenfolge für vereinheitlichte Ressourcen

Der CanonicalizedResource-Teil der Signaturzeichenfolge stellt die Ressource des Batchdiensts dar, die das Ziel der Anforderung ist. Jeder Teil der CanonicalizedResource-Zeichenfolge, der aus dem URI der Ressource abgeleitet wird, sollte genau so codiert werden, wie sie im URI vorliegt.

Beachten Sie die folgenden Regeln zum Erstellen der kanonisierten Ressourcenzeichenfolge:

  • Verwenden Sie das Neue-Zeile-Zeichen (\n) nach Möglichkeit nicht in den Werten für Abfrageparameter. Wenn Sie es verwenden müssen, vergewissern Sie sich, dass es sich nicht auf das Format der kanonisierten Ressourcenzeichenfolge auswirkt.

  • Vermeiden Sie die Verwendung von Kommas in den Abfrageparameterwerten.

Die CanonicalizedResource-Zeichenfolge kann wie folgt generiert werden:

  1. Beginnen Sie mit einem Schrägstrich("/"), gefolgt vom Namen des Kontos, das die Ressource besitzt, auf die zugegriffen wird.

  2. Fügen Sie den codierten URI-Pfad der Ressource ohne Abfrageparameter an.

  3. Rufen Sie alle Abfrageparameter für den Ressourcen-URI ab, einschließlich des api-version-Parameters .

  4. Konvertieren Sie alle Parameternamen in Kleinbuchstaben.

  5. Sortieren Sie die Abfrageparameter lexikografisch und in aufsteigender Reihenfolge nach Parameternamen.

  6. Führen Sie für die Namen und Werte der einzelnen Abfrageparameter eine URL-Decodierung durch.

  7. Fügen Sie der Zeichenfolge jeden Abfrageparameternamen und -wert im folgenden Format an, und vergewissern Sie sich, den Doppelpunkt (:) zwischen dem Namen und dem Wert einzuschließen:

    parameter-name:parameter-value  
    
  8. Wenn ein Abfrageparameter mehr als einen Wert aufweist, sortieren Sie alle Werte lexikografisch, und schließen Sie sie dann in eine durch Trennzeichen getrennte Liste ein:

    parameter-name:parameter-value-1,parameter-value-2,parameter-value-n  
    
  9. Fügen Sie nach jedem Name-Wert-Paar ein Neue-Zeile-Zeichen (\n) an.

Codieren der Signatur

Um die Signatur zu codieren, rufen Sie den HMAC-SHA256-Algorithmus für die in UTF-8 codierte Signaturzeichenfolge auf, und codieren Sie das Ergebnis als Base64. Verwenden Sie folgendes Format (als Pseudocode angezeigt):

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

Authentifizierung über Microsoft Entra ID

Azure Batch unterstützt die Authentifizierung mit Microsoft Entra ID, dem mehrinstanzenfähigen cloudbasierten Verzeichnis- und Identitätsverwaltungsdienst von Microsoft. Azure verwendet Microsoft Entra ID, um seine eigenen Kunden, Dienstadministratoren und Organisationsbenutzer zu authentifizieren.

Hinweis

Die Authentifizierung mit Microsoft Entra ID ist optional, wird jedoch nur empfohlen, wenn Ihr Batch-Konto für die Zuweisung von Pools in einem Benutzerabonnement eingerichtet ist. Die Option zur Poolzuordnung ist verfügbar, wenn Sie ein neues Batch-Konto erstellen. Wenn Ihr Konto für die Zuweisung von Pools in einem von Batch verwalteten Abonnement eingerichtet ist, ist die Verwendung von Microsoft Entra ID für die Authentifizierung optional. Weitere Informationen finden Sie unter Batch – VNET- und Benutzerdefinierte Imageunterstützung für VM-Pools.

Allgemeine Informationen zur Authentifizierung einer Anforderung bei Azure AD finden Sie in der Azure REST-API-Referenz. Um Azure AD mit dem Batch-Dienst verwenden zu können, benötigen Sie die folgenden Endpunkte.

Der gemeinsame Endpunkt des Azure AD-Endpunkts lautet:

https://login.microsoftonline.com/common

Der Ressourcenendpunkt für den Batch-Dienst lautet:

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

Weitere Informationen zum Registrieren Ihrer Batch-Anwendung bei Microsoft Entra ID finden Sie unter Authentifizieren Azure Batch Dienste mit Microsoft Entra ID.