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.
Signieren und Authentifizieren von REST-Anfragen (AWS Signatur (Version 2)
Themen
Anmerkung
Dieses Thema erklärt Authentifizierungsanfragen unter Verwendung von Signature Version 2. Amazon S3 unterstützt jetzt die neueste Signature Version 4. Diese neueste Signatur-Version wird in allen Regionen unterstützt. Alle neuen Regionen unterstützen nach dem 30. Januar 2014 nur Signature Version 4. Weitere Informationen finden Sie unter Authentifizieren von Anfragen (AWS Signature Version 4) in der Amazon Simple Storage Service API-Referenz.
Die Authentifizierung ist der Prozess, Ihre Identität gegenüber dem System nachzuweisen. Die Identität ist ein wichtiger Faktor in den Zugriffssteuerungsentscheidungen von Amazon S3. Anforderungen werden zum Teil basierend auf der Identität des Auftraggebers zugelassen oder abgewiesen. Das Recht, Buckets zu erstellen, ist beispielsweise für registrierte Entwickler reserviert (standardmäßig), und das Recht, Objekte in einem Bucket zu erstellen, ist für den Eigentümer des betreffenden Buckets reserviert. Als Entwickler machen Sie Anforderungen, für die diese Berechtigungen gelten müssen, deshalb müssen Sie Ihre Identität gegenüber dem System belegen, indem Sie Ihre Anforderungen authentifizieren. In diesem Abschnitt erfahren Sie mehr darüber.
Anmerkung
Der Inhalt dieses Abschnitts gilt nicht für HTTP POST. Weitere Informationen finden Sie unter Browser-based lädt mit POST () hoch AWS Signatur (Version 2).
Die Amazon-S3-REST-API verwendet ein allgemeines HTTP-Schema basierend auf einem verschlüsselten HMAC (Hash Message Authentication Code) für die Authentifizierung. Um eine Anforderung zu authentifizieren, verknüpfen Sie zuerst ausgewählte Elemente der Anforderung, um eine Zeichenfolge zu erstellen. Anschließend verwenden Sie Ihren AWS geheimen Zugriffsschlüssel, um den HMAC dieser Zeichenfolge zu berechnen. Informell wird dieser Vorgang als „Signieren der Anfrage“ bezeichnet, und die Ausgabe des HMAC-Algorithmus ist die Signatur, da sie die Sicherheitseigenschaften einer echten Signatur simuliert. Schließlich fügen Sie diese Signatur als Parameter der Anforderung hinzu. Dazu verwenden Sie die in diesem Abschnitt beschriebene Syntax.
Wenn das System eine authentifizierte Anfrage erhält, ruft es den AWS geheimen Zugriffsschlüssel ab, den Sie angeblich besitzen, und verwendet ihn auf die gleiche Weise, um eine Signatur für die empfangene Nachricht zu berechnen. Anschließend vergleicht es die berechnete Signatur mit der Signatur, die der Anforderer vorgezeigt hat. Wenn die beiden Signaturen übereinstimmen, kommt das System zu dem Schluss, dass der Anforderer Zugriff auf den AWS geheimen Zugriffsschlüssel haben muss, und handelt daher mit der Autorität des Prinzipals, an den der Schlüssel ausgestellt wurde. Stimmen die beiden Signaturen nicht überein, wird die Anforderung verworfen und das System antwortet mit einer Fehlermeldung.
Beispiel Authentifizierte Amazon S3 REST-Anfrage
GET /photos/puppy.jpg HTTP/1.1 Host: awsexamplebucket1.us-west-1.s3.amazonaws.com Date: Tue, 27 Mar 2007 19:36:42 +0000Authorization: AWS AKIAIOSFODNN7EXAMPLE: qgk2+6Sv9/oM7G3qLEjTH1a1l1g=
Verwenden von temporären Sicherheitsanmeldeinformationen
Wenn Sie Ihre Anfrage unter Verwendung temporärer Sicherheitsanmeldeinformationen signieren (siehe Senden von Anforderungen), müssen Sie das entsprechende Sicherheitstoken in Ihre Anfrage aufnehmen, indem Sie den x-amz-security-token-Header hinzufügen.
Wenn Sie unter Verwendung der AWS -Security-Token-Service API temporäre Sicherheitsanmeldeinformationen erhalten haben, beinhaltet die Antwort temporäre Sicherheitsanmeldeinformationen und ein Sitzungstoken. Sie geben den Wert des Sitzungstokens im x-amz-security-token-Header an, wenn Sie Anfragen an Amazon S3 senden. Informationen zur von IAM bereitgestellten AWS -Security-Token-Service API finden Sie im AWS -Security-Token-Service API-Referenzhandbuch unter Action.
Der Authentifizierungsheader
Die Amazon-S3-REST-API verwendet den standardmäßigen HTTP-Authorization-Header, um Authentifizierungs-Informationen weiterzugeben. (Der Name des Standardheaders ist unglücklich gewählt, weil er eine Authentifizierung weitergibt, keine Autorisierung.) Unter dem Amazon-S3-Authentifizierungsschema hat der Autorisierungsheader die folgende Form:
Authorization: AWSAWSAccessKeyId:Signature
Entwickler erhalten bei der Registrierung eine AWS Zugriffsschlüssel-ID und einen AWS geheimen Zugriffsschlüssel. Für die Anforderungs-Authentifizierung identifiziert das AWSAccessKeyId-Element die Zugriffsschlüssel-ID, die für die Berechnung der Signatur verwendet wurde, und indirekt für den Entwickler steht, der die Anforderung gestellt hat.
Das Signature Element ist der RFC 2104 HMAC-SHA1 der ausgewählten Elemente aus der Anfrage, weshalb der Signature Teil des Authorization-Headers von Anfrage zu Anfrage unterschiedlich ist. Wenn die vom System berechnete Anforderungssignatur mit der in der Anfrage Signature enthaltenen übereinstimmt, hat der Anforderer nachgewiesen, dass er im Besitz des AWS geheimen Zugangsschlüssels ist. die Anforderung wird unter der Identität verarbeitet, und mit der Genehmigung des Entwicklers, dem der Schlüssel ausgestellt wurde.
Die folgende Pseudogrammatik verdeutlicht den Aufbau des Authorization-Anforderungs-Headers. (In dem Beispiel steht \n für den Unicode-Code U+000A, häufig auch als Newline bezeichnet.)
Authorization = "AWS" + " " + AWSAccessKeyId + ":" + Signature; Signature = Base64( HMAC-SHA1( UTF-8-Encoding-Of(YourSecretAccessKey), UTF-8-Encoding-Of( StringToSign ) ) ); StringToSign = HTTP-Verb + "\n" + Content-MD5 + "\n" + Content-Type + "\n" + Date + "\n" + CanonicalizedAmzHeaders + CanonicalizedResource; CanonicalizedResource = [ "/" + Bucket ] + <HTTP-Request-URI, from the protocol name up to the query string> + [ subresource, if present. For example "?acl", "?location", or "?logging"]; CanonicalizedAmzHeaders = <described below>
HMAC-SHA1 ist ein in RFC 2104 definierter Algorithmus Keyed-Hashing für die Nachrichtenauthentifizierung. YourSecretAccessKey) als Schlüssel und die UTF-8 Kodierung von StringToSign als Nachricht. Die Ausgabe von HMAC-SHA1 ist ebenfalls eine Bytezeichenfolge, die als Digest bezeichnet wird. Der Signature-Anforderungsparameter wird durch eine Base64-Codierung dieses Digest erstellt.
Anfordern einer Kanonisierung für die Signatur
Wenn das System eine authentifizierte Anforderung erhält, vergleicht es die berechnete Anforderungssignatur mit der in der Anforderung im breitgestellten Signatur, wie bereits beschriebe StringToSign. Aus diesem Grund müssen Sie die Signatur nach derselben Methode berechnen, die auch Amazon S3 verwendet. Der Vorgang, bei dem eine Anfrage zur Unterzeichnung der Kanonisierung in einer vereinbarten Form gestellt wird.
CanonicalizedResource Konstruieren des Elements
CanonicalizedResource stellt die für die Anfrage relevante Amazon-S3-Ressource dar. Für eine REST-Anforderung erstellen Sie sie wie folgt:
-
Beginnen Sie mit einer leeren Zeichenfolge (
""). -
Wenn die Anforderung unter Verwendung des HTTP Host-Headers (virtueller gehosteter Stils) einen Bucket angibt, fügen Sie den Bucket-Namen mit vorgestelltem
"/"an (z. B. „/bucketname“). Für Anforderungen im Pfad-Stil und Anforderungen, die an keinen spezifischen Bucket gerichtet sind, machen Sie nichts. Weitere Informationen zu Anfragen im virtuellen Hosting-Stil finden Sie unter Virtuelles Hosten von Buckets.Für eine virtuelle Hosting-Anfrage "" ist das https://awsexamplebucket1.s3.us-west-1.amazonaws.com/photos/puppy.jpg „/awsexamplebucket1".
CanonicalizedResourceFür die Anfrage im Pfadstil "" ist das „“. https://s3.us-west-1.amazonaws.com/awsexamplebucket1/photos/puppy.jpg
CanonicalizedResource -
Hängen Sie den Pfadteil des nicht dekodierten HTTP an, bis zur Request-URI Abfragezeichenfolge, aber nicht einschließlich.
Für eine virtuelle Hosting-Anfrage "" ist das https://awsexamplebucket1.s3.us-west-1.amazonaws.com/photos/puppy.jpg
CanonicalizedResource„//puppy.jpg“. awsexamplebucket1/photosFür eine Anfrage im Pfadstil ""
CanonicalizedResourceist das https://s3.us-west-1.amazonaws.com/awsexamplebucket1/photos/puppy.jpg „//puppy.jpg“. awsexamplebucket1/photos An dieser Stelle ist derCanonicalizedResourcefür Anforderungen mit virtuell gehostetem Stil und Pfad-Stil gleich.Im Fall einer Anforderung, die sich nicht an einen Bucket richtet, wie GET Service, fügen Sie „/“ an.
-
Wenn sich die Anforderung an eine Subressource richtet, wie beispielsweise
?versioning,?location,?acl,?lifecycle, oder?versionid, fügen Sie die Subressource an, gegebenenfalls ihren Wert und das Fragezeichen. Beachten Sie, dass bei mehreren Unterressourcen die Unterressourcen lexikografisch nach dem Namen der Unterressource sortiert und durch '&' getrennt werden müssen, z. B.? ACL&VersionId=.valueDie Unterressourcen, die bei der Erstellung des CanonicalizedResource Elements berücksichtigt werden müssen, sind acl, lifecycle, location, logging, notification, partNumber, policy, requestPayment, UploadID, uploads, versionId, versioning, versions und website.
Wenn die Anfrage Abfragezeichenfolgen-Parameter angibt, die die Antwort-Header-Werte überschreiben (siehe Get Object), fügen Sie die Abfragezeichenfolgen-Parameter und ihre Werte an. Bei einer Signatur codieren Sie diese Werte nicht. Bei einer Anforderung dagegen müssen Sie diese Parameterwerte codieren. Die Abfrageparameter in einer GET-Anforderung sind unter anderem
response-content-type,response-content-language,response-expires,response-cache-control,response-content-dispositionundresponse-content-encoding.Der
deleteAbfragezeichenfolgenparameter muss enthalten sein, wenn Sie die Löschanforderung für mehrere Objekte erstellen. CanonicalizedResource
Elemente von CanonicalizedResource , die aus dem HTTP stammen, Request-URI sollten wörtlich so signiert werden, wie sie in der HTTP-Anfrage vorkommen, einschließlich URL-Encoding Metazeichen.
Das CanonicalizedResource könnte anders sein als das HTTP Request-URI. Insbesondere, wenn Ihre Anfrage den Host HTTP-Header verwendet, um einen Bucket anzugeben, erscheint der Bucket nicht im HTTP Request-URI. Die CanonicalizedResource beinhaltet den Bucket jedoch weiterhin. Abfragezeichenfolgenparameter können auch in der vorkommen Request-URI , sind aber nicht in enthaltenCanonicalizedResource. Weitere Informationen finden Sie unter Virtuelles Hosten von Buckets.
Das Element konstruieren CanonicalizedAmzHeaders
Um den CanonicalizedAmzHeaders Teil von zu konstruierenStringToSign, wählen Sie alle HTTP-Anforderungsheader aus, die mit 'x-amz-' beginnen (bei einem Vergleich ohne Berücksichtigung der Groß- und Kleinschreibung), und gehen Sie wie folgt vor.
-
Wandeln Sie jeden HTTP-Headernamen in Kleinbuchstaben um. Beispielsweise wird '
X-Amz-Date' zu 'x-amz-date'. -
Sortieren Sie die Header alphabetisch nach dem Headernamen.
-
Kombinieren Sie Header-Felder mit demselben Namen zu einem „header-name:comma-separated-value-list“-Paar, wie von RFC 2616 Abschnitt 4.2 vorgegeben, ohne Leerzeichen zwischen den Werten. Die beiden Metadaten-Header '
x-amz-meta-username: fred' und 'x-amz-meta-username: barney' würden beispielsweise zu einem einzigen Header 'x-amz-meta-username: fred,barney' zusammengefasst. -
„Falten“ Sie lange Header „auf“, die sich über mehrere Zeilen erstrecken (wie durch RFC 2616 Abschnitt 4.2 erlaubt), indem Sie die „faltenden“ Leerzeichen (einschließlich Neue-Zeile-Zeichen) durch ein einzelnes Leerzeichen ersetzen.
-
Löschen Sie alle Leerzeichen um den Doppelpunkt in der Kopfzeile. Zum Beispiel würde der Header '' zu '
x-amz-meta-username: fred,barney' werden.x-amz-meta-username:fred,barney -
Schließlich fügen Sie jedem kanonisierten Header in der Ergebnisliste ein Neue-Zeile-Zeichen (
U+000A) hinzu. Konstruieren Sie das CanonicalizedResource Element, indem Sie alle Header in dieser Liste zu einer einzigen Zeichenfolge verketten.
Positionelle und benannte HTTP-Header-Elemente StringToSign
Die ersten Header-Elemente von StringToSign (Content-Type, Date und Content-MD5) sind positioneller Natur. StringToSignenthält nicht die Namen dieser Header, sondern nur ihre Werte aus der Anfrage. Im Gegensatz dazu sind die 'x-amz-'-Elemente benannt. Sowohl die Header-Namen als auch die Header-Werte erscheinen in StringToSign.
Wenn ein positionaler Header, der in der Definition von StringToSign vorgegeben ist, in Ihrer Anforderung nicht vorhanden ist (z. B. sind Content-Type oder Content-MD5 optionale für PUT-Anforderungen und sinnlos für GET-Anforderungen), setzen Sie in dieser Position die leere Zeichenfolge ("") ein.
Zeitstempel-Anforderung
Ein gültiger Zeitstempel (unter Verwendung des HTTP-Headers Date oder einer x-amz-date-Alternative) ist zwingend erforderlich für authentifizierte Anforderungen. Darüber hinaus muss der Client-Zeitstempel in einer authentifizierten Anfrage innerhalb eines Zeitraums von 15 Minuten zur Amazon-S3-Systemzeit liegen, wenn die Anfrage empfangen wird. Wenn dies nicht der Fall ist, schlägt die Anforderung mit RequestTimeTooSkewed-Fehlercode fehl. Diese Einschränkungen sollen verhindern, dass abgefangene Anforderungen böswillig wiederholt werden. Für einen strengeren Schutz gegen ein Abhören transportieren Sie authentifizierte Anforderung mit HTTPS.
Anmerkung
Die Auswertungsbeschränkung im Hinblick auf das Anforderungsdatum gilt nur für authentifizierte Anforderungen, die keine Abfrage-String-Authentifizierung verwenden. Weitere Informationen finden Sie unter Alternative zur Authentifizierung der Abfragezeichenfolge.
Einige HTTP-Client-Bibliotheken unterstützen die Möglichkeit nicht, den Date-Header für eine Anforderung einzurichten. Wenn Sie Probleme damit haben, den Wert des 'Date'-Headers in kanonisierte Header aufzunehmen, können Sie den Zeitstempel für die Anforderung stattdessen auch mit einem 'x-amz-date'-Header einrichten. Der Wert des x-amz-date-Headers muss in einem der von RFC 2616 vorgegebenen Formate vorliegen (http://www.ietf.org/rfc/rfc2616.txtx-amz-date-Header vorhanden ist, ignoriert das System bei der Berechnung der Anforderungssignatur jeden Date-Header. Wenn Sie also den x-amz-date-Header aufnehmen, verwenden Sie die leere Zeichenfolge für Date, wenn Sie den StringToSign erstellen. Ein Beispiel finden Sie im nächsten Abschnitt.
Authentifizierungsbeispiele
Die Beispiele in diesem Abschnitt verwenden die (nicht funktionierenden) Anmeldeinformationen aus der folgenden Tabelle.
| Parameter | Wert |
|---|---|
| AWSAccessKeyId | AKIAIOSFODNN7EXAMPLE |
| AWSSecretAccessKey | wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY |
In den StringToSigns des Beispiels ist die Formatierung nicht relevant, und \n steht für den Unicode-Punkt U+000A, allgemein als Neue-Zeile-Zeichen bezeichnet. Außerdem verwenden die Beispiele "+0000", um die Zeitzone anzugeben. Sie können die Zeitzone stattdessen mit "GMT" angeben, aber in den Beispielen werden andere Signaturen verwendet.
Object GET
In diesem Beispiel wird ein Objekt aus dem Bucket „awsexamplebucket1“ abgerufen.
| Anforderung | StringToSign |
|---|---|
|
|
Beachten Sie, dass der den Bucket-Namen CanonicalizedResource enthält, HTTP jedoch Request-URI nicht. (Der Bucket wird vom Host-Header spezifiziert.)
Anmerkung
Das folgende Python-Skript berechnet die vorhergehende Signatur unter Verwendung der bereitgestellten Parameter. Sie können dieses Skript verwenden, um Ihre eigenen Signaturen zu erstellen und gegebenenfalls die Schlüssel StringToSign zu ersetzen.
import base64 import hmac from hashlib import sha1 access_key = 'AKIAIOSFODNN7EXAMPLE'.encode("UTF-8") secret_key = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'.encode("UTF-8") string_to_sign = 'GET\n\n\nTue, 27 Mar 2007 19:36:42 +0000\n/awsexamplebucket1/photos/puppy.jpg'.encode("UTF-8") signature = base64.b64encode( hmac.new( secret_key, string_to_sign, sha1 ).digest() ).strip() print(f"AWS {access_key.decode()}:{signature.decode()}")
Object PUT
In diesem Beispiel wird ein Objekt in den Bucket „awsexamplebucket1“ eingefügt.
| Anforderung | StringToSign |
|---|---|
|
|
Notieren Sie sich den Content-Type Header in der Anfrage und in der StringToSign. Beachten Sie auch, dass das in der leer gelassen Content-MD5 wird StringToSign, da es in der Anfrage nicht vorhanden ist.
Auflisten
In diesem Beispiel wird der Inhalt des Buckets „awsexamplebucket1“ aufgelistet.
| Anforderung | StringToSign |
|---|---|
|
|
Beachten Sie den abschließenden Schrägstrich bei CanonicalizedResource und das Fehlen von Abfragezeichenfolgenparametern.
Fetch
In diesem Beispiel wird die Zugriffskontrollrichtlinien-Subressource für den Bucket „awsexamplebucket1“ abgerufen.
| Anforderung | StringToSign |
|---|---|
|
|
Beachten Sie, dass der Parameter für die Subresource-Abfragezeichenfolge in der enthalten ist. CanonicalizedResource
Delete
In diesem Beispiel wird ein Objekt über die path-style- und Date-Alternative aus dem Bucket „awsexamplebucket1“ entfernt.
| Anforderung | StringToSign |
|---|---|
|
|
Beachten Sie die alternative Methode „x-amz-date“ zur Angabe des Datums (weil unsere Client-Bibliothek uns beispielsweise daran gehindert hat, das Datum festzulegen). In diesem Fall hat x-amz-date Vorrang vor dem Date-Header. Aus diesem Grund muss der Datumseintrag in der Signatur den Wert des x-amz-date-Headers enthalten.
Hochladen
Dieses Beispiel lädt ein Objekt in einen virtuell gehosteten Bucket mit CNAME-Stil mit Metadaten.
| Anforderung | StringToSign |
|---|---|
|
|
Beachten Sie, wie die „x-amz-“-Header sortiert, von Leerzeichen befreit und in Kleinbuchstaben umgewandelt wurden. Beachten Sie außerdem, dass mehrere Header mit demselben Namen unter Verwendung von Kommas zum Trennen der Werte verknüpft wurden.
Beachten Sie, wie nur die HTTP-Header Content-Type und Content-MD5 in StringToSign erscheinen. Die anderen Content-*-Header erscheinen nicht.
Beachten Sie auch hier, dass der den Bucket-Namen CanonicalizedResource enthält, HTTP Request-URI jedoch nicht. (Der Bucket wird vom Host-Header spezifiziert.)
Auflisten aller meiner Buckets
| Anforderung | StringToSign |
|---|---|
|
|
Unicode-Schlüssel
| Anforderung | StringToSign |
|---|---|
|
|
Anmerkung
Die ElementeStringToSign, die aus dem abgeleitet wurden, Request-URI werden wörtlich genommen, einschließlich URL-Encoding und Großschreibung.
Probleme mit dem Signieren von REST-Anforderungen
Wenn die Authentifizierung einer REST-Anforderung fehlschlägt, reagiert das System mit einem XML-Fehlerdokument auf die Anforderung. Die in diesem Fehlerdokument enthaltene Information soll Entwicklern helfen, das Problem zu diagnostizieren. Insbesondere erkennen Sie an dem StringToSign-Element des SignatureDoesNotMatch-Fehlerdokuments genau, welche Anforderungs-Kanonisierung das System verwendet.
Einige Toolkits fügen stillschweigend Header ein, die Sie zuvor nicht kennen, wie beispielsweise den Header Content-Type bei einem PUT. In den meisten dieser Fälle bleibt der Wert des eingefügten Headers konstant, sodass Sie fehlende Header unter Verwendung von Tools wie Ethereal oder tcpmon erkennen können.
Alternative zur Authentifizierung der Abfragezeichenfolge
Einige Anforderungstypen können Sie authentifizieren, indem Sie die angeforderten Informationen als Abfragezeichenfolgenparameter übergeben, statt den HTTP-Header Authorization zu verwenden. Dies ist praktisch, um direkten Zugriff durch einen Browser von Dritten auf Ihre privaten Amazon-S3-Daten zu ermöglichen, ohne dass die Anfrage über einen Proxy gesendet wird. Die Idee besteht in der Konstruierung einer „vorsignierten“ Anforderung und ihrer Codierung als einer URL, die vom Browser eines Endbenutzers geladen werden kann. Darüber hinaus können Sie eine vorsignierte Anforderung durch die Angabe einer Ablaufzeit begrenzen.
Weitere Informationen zur Verwendung von Abfrageparametern zur Authentifizierung von Anfragen finden Sie unter Authentifizieren von Anfragen: Verwenden von Abfrageparametern (AWS Signature Version 4) in der Amazon Simple Storage Service API-Referenz. Beispiele für die Verwendung der AWS SDKs zum Generieren vorsignierter URLs finden Sie unter Objekte mit vorsignierten URLs teilen.
Erstellen einer Signatur
Das folgende Beispiel zeigt eine mit Abfragezeichenfolge authentifizierte Amazon-S3-REST-Anfrage.
GET /photos/puppy.jpg ?AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Expires=1141889120&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv4%3D HTTP/1.1 Host: awsexamplebucket1.s3.us-west-1.amazonaws.com Date: Mon, 26 Mar 2007 19:37:58 +0000
Die Authentifizierungsmethode für die Abfragezeichenkette benötigt keine spezifischen HTTP-Header. Stattdessen werden die erforderlichen Authentifizierungselemente als Abfragezeichenfolgenparameter angegeben:
| Abfragezeichenfolgen-Parametername | Beispielwert | Description |
|---|---|---|
AWSAccessKeyId |
AKIAIOSFODNN7EXAMPLE |
Ihre AWS Zugangsschlüssel-ID. Gibt den AWS geheimen Zugriffsschlüssel an, der zum Signieren der Anfrage verwendet wurde, und indirekt die Identität des Entwicklers, der die Anfrage stellt. |
Expires |
1141889120 |
Die Zeit, wann die Signatur abläuft, angegeben als die Anzahl der Sekunden, die seit dem 1. Januar 1970 00:00:00 UTC verstrichen sind. Eine Anforderung, die nach dieser Zeit empfangen wird (abhängig vom Server), wird abgelehnt. |
Signature |
vjbyPxybdZaNmGa%2ByT272YEAiv4%3D |
Die URL-Kodierung der Base64-Kodierung von HMAC-SHA1 von StringToSign. |
Die Methode zur Authentifizierung der Abfragezeichenfolge unterscheidet sich leicht von der üblichen Methode, aber nur im Format des Signature-Anforderungsparameters und des StringToSign-Elements. Die folgende Pseudogrammatik verdeutlicht die Authentifizierungsmethode für die Abfragezeichenfolge.
Signature = URL-Encode( Base64( HMAC-SHA1( YourSecretAccessKey, UTF-8-Encoding-Of( StringToSign ) ) ) ); StringToSign = HTTP-VERB + "\n" + Content-MD5 + "\n" + Content-Type + "\n" + Expires + "\n" + CanonicalizedAmzHeaders + CanonicalizedResource;
YourSecretAccessKeyist die AWS geheime Zugriffsschlüssel-ID, die Amazon Ihnen zuweist, wenn Sie sich als Amazon Web Service-Entwickler registrieren. Beachten Sie URL-Encoded , wie Signature das für die Platzierung in der Abfragezeichenfolge geeignet ist. Beachten Sie auch, dass in StringToSign das HTTP-Positionselement Date durch Expires ersetzt wurde. CanonicalizedAmzHeaders und CanonicalizedResource sind gleich.
Anmerkung
In der Methode für die Abfrage-String-Authentifizierung verwenden Sie den Header Date oder x-amz-date request nicht, wenn Sie die zu signierende Zeichenfolge berechnen.
Authentifizierung von Abfragezeichenfolgen-Anforderungen
| Anforderung | StringToSign |
|---|---|
|
|
In diesem Beispiel wird davon ausgegangen, dass ein Browser, wenn er die GET-Anfrage stellt, weder einen Content-MD5 oder Content-Type -Header bereitstellt, noch irgendwelche x-amz-Header setzt, sodass diese Teile von leer StringToSign bleiben.
Verwendung der Base64-Codierung
Signaturen von HMAC-Anforderungen müssen mit Base64 codiert werden. Die Base64-Codierung wandelt die Signatur in einen einfachen ASCII-String um, der der Anforderung hinzugefügt werden kann. Zeichen, die in der Signatur erscheinen können, wie beispielsweise Plus (+), Schrägstrich (/) oder Gleichheitszeichen (=), müssen wie in einer URI codiert werden. Enthält beispielsweise der Authentifizierungscode ein Plussymbol (+), codieren Sie es in der Anforderung als &2B. Einen Schrägstrich codieren Sie als &2F, ein Gleichheitszeichen als %3D.
Beispiele für die Base64-Codierung finden Sie in Amazon S3 Authentifizierungsbeispiele.