

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Anfragen authentifizieren: Verwenden von Abfrageparametern (AWS Signatur (Version 4)
<a name="sigv4-query-string-auth"></a>

Wie in der Authentifizierungsübersicht (siehe[Authentifizierungsmethoden](sig-v4-authenticating-requests.md#auth-methods-intro)) beschrieben, können Sie Authentifizierungsinformationen mithilfe von Abfragezeichenfolgenparametern angeben. Die Verwendung von Abfrageparametern zur Authentifizierung von Anfragen ist nützlich, wenn Sie eine Anfrage vollständig in einer URL ausdrücken möchten. Diese Methode wird auch als Vorsignierung einer URL bezeichnet. 

Ein Anwendungsfall für vorsignierte URLs ist, dass Sie temporären Zugriff auf Ihre Amazon S3-Ressourcen gewähren können. Sie können beispielsweise eine vorsignierte URL in Ihre Website einbetten oder sie alternativ im Befehlszeilenclient (wie Curl) verwenden, um Objekte herunterzuladen.

**Anmerkung**  
Sie können das auch verwenden, um AWS CLI vorsignierte URLs zu erstellen. Weitere Informationen finden Sie unter [`presign`](https://docs.aws.amazon.com/cli/latest/reference/s3/presign.html) in der Referenz zum *AWS CLI -Befehl*.

Im Folgenden finden Sie ein Beispiel für eine vorsignierte URL. 

 

```
https://examplebucket.s3.amazonaws.com/test.txt
?X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential={{<your-access-key-id>}}/20130721/us-east-1/s3/aws4_request
&X-Amz-Date=20130721T201207Z
&X-Amz-Expires=86400
&X-Amz-SignedHeaders=host
&X-Amz-Signature={{<signature-value>}}
```



Beachten Sie in der Beispiel-URL Folgendes:

 
+ Die Zeilenumbrüche wurden aus Gründen der Lesbarkeit hinzugefügt.
+ Der `X-Amz-Credential`-Wert in der URL zeigt das Zeichen „/“ nur zur besseren Lesbarkeit an. In der Praxis sollte es als codiert werden. `%2F` Beispiel:

   

  ```
  &X-Amz-Credential={{<your-access-key-id>}}%2F20130721%2Fus-east-1%2Fs3%2Faws4_request
  ```

  

Die folgende Tabelle beschreibt die Abfrageparameter in der URL, die Informationen zur Authentifizierung bereitstellen. 


| Abfragezeichenfolgen-Parametername | Beispielwert | 
| --- | --- | 
| X-Amz-Algorithm | Identifiziert die Version von AWS Signature und den Algorithmus, den Sie zur Berechnung der Signatur verwendet haben. <br />Für AWS Signature Version 4 setzen Sie diesen Parameterwert auf`AWS4-HMAC-SHA256`. Diese Zeichenfolge identifiziert AWS Signature Version 4 (AWS 4) und den HMAC-SHA256 Algorithmus (HMAC-SHA256).  | 
| X-Amz-Credential | Zusätzlich zu Ihrer Zugriffsschlüssel-ID gibt dieser Parameter auch den Bereich (AWS-Region und den Dienst) an, für den die Signatur gültig ist. Dieser Wert muss mit dem Gültigkeitsbereich übereinstimmen, den Sie für die Signaturberechnungen verwenden, die im folgenden Abschnitt beschrieben werden. Das allgemeine Format für diesen Parameterwert lautet wie folgt:<br /> <pre>{{<your-access-key-id>}}/{{<date>}}/{{<AWS-Region>}}/{{<AWS-service>}}/aws4_request</pre><br />Beispiel: <br /> <pre>AKIAIOSFODNN7EXAMPLE/20130721/us-east-1/s3/aws4_request</pre><br />Für Amazon S3 lautet die {{AWS-service}} Zeichenfolge`s3`. Eine Liste der `AWS-region` S3-Zeichenfolgen finden Sie unter [ Regionen und Endpunkte ](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region) im *Allgemeine AWS-Referenz*. | 
| X-Amz-Date | Das Datums- und Uhrzeitformat muss dem ISO-8601-Standard entsprechen und mit dem Format "{{yyyyMMdd}}T {{HHmmss}} Z“ formatiert sein. Lauten Datum und Uhrzeit beispielsweise "08/01/2016 15:32:41.982-700", müssen sie zuerst in UTC (Coordinated Universal Time) umgerechnet und dann als „20160801T223241Z“ übermittelt werden.  | 
| X-Amz-Expires | Gibt den Zeitraum in Sekunden an, für den die generierte vorsignierte URL gültig ist. `86400`Zum Beispiel (24 Stunden). Es handelt sich um einen Ganzzahlwert. Der Mindestwert, den Sie festlegen können, ist 1, und der Höchstwert ist 604800 (sieben Tage).<br />Eine vorsignierte URL kann maximal sieben Tage gültig sein, da der Signaturschlüssel, den Sie für die Signaturberechnung verwenden, bis zu sieben Tage gültig ist.  | 
| X-Amz-SignedHeaders | Listet die Header auf, die Sie zur Berechnung der Signatur verwendet haben. Für die Signaturberechnungen sind folgende Header erforderlich:<br /> +  Der `host` HTTP-Header. <br />+  Alle `x-amz-*` Header, die Sie der Anfrage hinzufügen möchten. <br />   Für zusätzliche Sicherheit sollten Sie alle Anforderungs-Header signieren, die Sie in Ihre Anfrage aufnehmen möchten.  | 
| X-Amz-Signature | Stellt die Signatur zur Authentifizierung Ihrer Anfrage bereit. Diese Signatur muss mit der Signatur übereinstimmen, die Amazon S3 berechnet. Andernfalls lehnt Amazon S3 die Anfrage ab. Beispiel: ` 733255ef022bec3f2a8701cd61d4b371f3f28c9f193a1f02279211d48d5193d7`<br />Signaturberechnungen werden im folgenden Abschnitt beschrieben. | 
| X-Amz-Security-Token | Optionaler Parameter für Anmeldeinformationen, wenn Sie Anmeldeinformationen verwenden, die vom STS-Service stammen. | 



## Berechnung einer Signatur
<a name="query-string-auth-v4-signing"></a>

Das folgende Diagramm veranschaulicht den Prozess der Signaturberechnung. 

 

![AWS Signaturprozess der Version 4 mit Schritten zur kanonischen Anforderung, zu signierenden Zeichenfolge und Signaturgenerierung.](https://docs.aws.amazon.com/de_de/AmazonS3/latest/developerguide/images/sigV4-using-query-params.png)




In der folgenden Tabelle werden die im Diagramm dargestellten Funktionen beschrieben. Für diese Funktionen muss Code implementiert werden.


| Funktion | Description | 
| --- | --- | 
| Lowercase() | Wandeln Sie die Zeichenfolge in Kleinbuchstaben um. | 
| Hex() | Kodierung in Kleinbuchstaben im Basis-16-Format. | 
| SHA256Hash() | Kryptografische Hash-Funktion des Secure Hash Algorithm (SHA). | 
| HMAC-SHA256() | Berechnet HMAC unter Verwendung des SHA256-Algorithmus mit dem bereitgestellten Signaturschlüssel. Dies ist die endgültige Signatur. | 
| Trim() | Entfernen Sie alle führenden oder nachgestellten Leerzeichen.  | 
| UriEncode() | URI-kodiert jedes Byte. UriEncode() muss die folgenden Regeln durchsetzen:+  URI kodiert jedes Byte mit Ausnahme der nicht reservierten Zeichen: „A“–„Z“, „a“–„z“, „0“–„9“, „-“, „.“, „\_“ und „\~“.  <br />+ Das Leerzeichen ist ein reserviertes Zeichen und muss als „%20“ (und nicht als „\+“) codiert werden. <br />+ Jedes URI-codierte Byte besteht aus einem „%“ und dem zweistelligen Hexadezimalwert des Bytes. <br />+ Buchstaben im Hexadezimalwert müssen in Großbuchstaben geschrieben sein, zum Beispiel „%1A“. <br />+ Kodieren Sie den Schrägstrich „/“ überall außer im Objektschlüsselnamen. Wenn der Objektschlüsselname beispielsweise `photos/Jan/sample.jpg` lautet, wird der Schrägstrich im Schlüsselnamen nicht codiert.  Die von Ihrer Entwicklungsplattform bereitgestellten UriEncode Standardfunktionen funktionieren möglicherweise aufgrund von Unterschieden in der Implementierung und den damit verbundenen Mehrdeutigkeiten in den zugrunde liegenden RFCs nicht. Wir empfehlen Ihnen, Ihre eigene benutzerdefinierte UriEncode Funktion zu schreiben, um sicherzustellen, dass Ihre Codierung funktioniert. <br />Das Folgende ist eine Beispielfunktion UriEncode () in Java.<pre>public static String UriEncode(CharSequence input, boolean encodeSlash) {<br />          StringBuilder result = new StringBuilder();<br />          for (int i = 0; i < input.length(); i++) {<br />              char ch = input.charAt(i);<br />              if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9') || ch == '_' || ch == '-' || ch == '~' || ch == '.') {<br />                  result.append(ch);<br />              } else if (ch == '/') {<br />                  result.append(encodeSlash ? "%2F" : ch);<br />              } else {<br />                  result.append(toHexUTF8(ch));<br />              }<br />          }<br />          return result.toString();<br />      }</pre> | 

Weitere Hinweise zum Signaturvorgang (Einzelheiten zur Erstellung einer kanonischen Anfrage, zur zu signierenden Zeichenfolge und zur Berechnung der Signatur) finden Sie unter. [Signaturberechnungen für den Autorisierungs-Header: Übertragung der Nutzlast in einem einzigen Block (AWS Signatur (Version 4)](sig-v4-header-based-auth.md) Der Vorgang ist im Allgemeinen derselbe, mit der Ausnahme, dass sich die Erstellung einer ** CanonicalRequest ** vorsignierten URL wie folgt unterscheidet:

 
+ Sie fügen der ** Canonical Request keinen Nutzlast-Hash hinzu**, da Sie beim Erstellen einer vorsignierten URL den Inhalt der Nutzlast nicht kennen, da die URL zum Hochladen einer beliebigen Nutzlast verwendet wird. Stattdessen verwenden Sie eine konstante Zeichenfolge. `UNSIGNED-PAYLOAD` 
+ Die ** kanonische Abfragezeichenfolge ** muss alle Abfrageparameter aus der vorherigen Tabelle mit Ausnahme von enthalten. `X-Amz-Signature` 
+ Für S3 müssen Sie den `X-Amz-Security-Token` Abfrageparameter in die URL aufnehmen, wenn Sie Anmeldeinformationen verwenden, die vom STS-Dienst stammen.
+ **Canonical Header ** müssen den HTTP-Header enthalten. `host` Wenn Sie beabsichtigen, einen der `x-amz-* ` Header einzubeziehen, müssen diese Header ebenfalls für die Signaturberechnung hinzugefügt werden. Sie können optional alle anderen Header hinzufügen, die Sie in Ihre Anfrage aufnehmen möchten. Für zusätzliche Sicherheit sollten Sie so viele Header wie möglich signieren. Wenn Sie einen signierten Header hinzufügen, der auch ein signierter Abfrageparameter ist, und sich deren Wert unterscheidet, erhalten Sie eine `InvalidRequest` Fehlermeldung, da die Eingabe widersprüchlich ist.

## Ein Beispiel
<a name="query-string-auth-v4-signing-example"></a>

Angenommen, Sie haben ein Objekt `test.txt` in Ihrem `examplebucket` Eimer. Sie möchten dieses Objekt für einen Zeitraum von 24 Stunden (86400 Sekunden) mit anderen teilen, indem Sie eine vorsignierte URL erstellen. 

 

```
https://examplebucket.s3.amazonaws.com/test.txt
?X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request
&X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host
&X-Amz-Signature={{<signature-value>}}
```

Die folgenden Schritte veranschaulichen zunächst die Signaturberechnungen und dann die Konstruktion der vorsignierten URL. Das Beispiel geht von den folgenden zusätzlichen Annahmen aus:

 
+ Der Zeitstempel der Anfrage ist`Fri, 24 May 2013 00:00:00 GMT`.
+ Der Bucket befindet sich in der Region USA Ost (Nord-Virginia), und die Anmeldeinformationen `Scope` und die `Signing Key` Berechnungen werden `us-east-1` als Regionsspezifizierer verwendet.  Weitere Informationen finden Sie unter [ Regionen und Endpunkte](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region) in der *Allgemeine AWS-Referenz*. 

Sie können dieses Beispiel als Testfall verwenden, um die Signatur zu überprüfen, die Ihr Code berechnet. Sie müssen jedoch denselben Bucket-Namen, Objektschlüssel, Zeitstempel und die folgenden Beispiel-Anmeldeinformationen verwenden:


| Parameter | Wert | 
| --- | --- | 
| AWSAccessKeyId | AKIAIOSFODNN7EXAMPLE | 
| AWSSecretAccessKey | wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY | 

1. 

**StringToSign**

   1. 

**CanonicalRequest**

       

      ```
      GET
      /test.txt
      X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host
      host:examplebucket.s3.amazonaws.com
      
      host
      UNSIGNED-PAYLOAD
      ```

       

   1. 

**StringToSign**

       

      ```
      AWS4-HMAC-SHA256
      20130524T000000Z
      20130524/us-east-1/s3/aws4_request
      3bfa292879f6447bbcda7001decf97f4a54dc650c8942174ae0a9121cf58ad04
      ```

       

1. 

**SigningKey**

    

   ```
   signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "{{<YourSecretAccessKey>}}","20130524"),"us-east-1"),"s3"),"aws4_request")
   ```

    

1. 

**Signatur**

    

   ```
   aeeed9bbccd4d02ee5c0109b86d86835f995330da4c265957d157751f604d404
   ```

    

   Jetzt haben Sie alle Informationen, um eine vorsignierte URL zu erstellen. Die resultierende URL für dieses Beispiel wird wie folgt angezeigt (Sie können dies verwenden, um Ihre vorsignierte URL zu vergleichen):

   ```
   https://examplebucket.s3.amazonaws.com/test.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=aeeed9bbccd4d02ee5c0109b86d86835f995330da4c265957d157751f604d404
   ```

## Beispiel 2
<a name="query-string-auth-v4-signing-example-2"></a>

Im Folgenden finden Sie ein Beispiel (das nichts mit dem vorherigen Beispiel zu tun hat), das eine vorsignierte URL mit dem Parameter zeigt. `X-Amz-Security-Token`

```
https://examplebucket.s3.us-east-1.amazonaws.com/test.txt
?X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request
&X-Amz-Date=20200524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host
&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEMv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJGMEQCIBSUbVdj9YGs2g0HkHsOHFdkwOozjARSKHL987NhhOC8AiBPepRU1obMvIbGU0T%2BWphFPgK%2Fqpxaf5Snvm5M57XFkCqlAgjz%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDQ3MjM4NTU0NDY2MCIM83pULBe5%2F%2BNm1GZBKvkBVslSaJVgwSef7SsoZCJlfJ56weYl3QCwEGr2F4BmCZZyFpmWEYzWnhNK1AnHMj5nkfKlKBx30XAT5PZGVrmq4Vkn9ewlXQy1Iu3QJRi9Tdod8Ef9%2FyajTaUGh76%2BF5u5a4O115jwultOQiKomVwO318CO4l8lv%2F3HhMOkpdanMXn%2B4PY8lvM8RgnzSu90jOUpGXEOAo%2F6G8OqlMim3%2BZmaQmasn4VYRvESEd7O72QGZ3%2BvDnDVnss0lSYjlv8PP7IujnvhZRnj0WoeOyMe1lL0wTG%2Fa9usH5hE52w%2FYUJccOn0OaZuyROuVsRV4Q70sbWQhUvYUt%2B0tUMKzm8vsFOp4BaNZFqobbjtb36Y92v%2Bx5kY6i0s8QE886jJtUWMP5ldMziClGx3p0mN5dzsYlM3GyiJ%2FO1mWkPQDwg3mtSpOA9oeeuAMPTA7qMqy9RNuTKBDSx9EW27wvPzBum3SJhEfxv48euadKgrIX3Z79ruQFSQOc9LUrDjR%2B4SoWAJqK%2BGX8Q3vPSjsLxhqhEMWd6U4TXcM7ku3gxMbzqfT8NDg%3D
&X-Amz-Signature={{<signature-value>}}
```