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-Anforderungen
Themen
- Verwenden von temporären Sicherheitsanmeldeinformationen
- Der Authentifizierungsheader
- Anfordern einer Kanonisierung für die Signatur
- Konstruieren des - CanonicalizedResource Elements
- Konstruieren des - CanonicalizedAmzHeaders Elements
- Positionale und benannte HTTP-Header- StringToSign Elemente
- Zeitstempel-Anforderung
- Authentifizierungsbeispiele
- Probleme mit dem Signieren von REST-Anforderungen
- Alternative zur Authentifizierung der Abfragezeichenfolge
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 Authenticating Requests (Authentifizierung von Anforderungn) (AWS Signature Version 4) in der API-Referenz für Amazon Simple Storage Service.
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 Browserbasierte Uploads mit POST (AWS Signaturversion 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 geheimen AWS-Zugriffsschlüssel, um den HMAC für diese Zeichenfolge zu berechnen. Informell bezeichnen wir diesen Prozess als „Signieren der Anforderung“. Wir bezeichnen die Ausgabe des HMAC-Algorithmus als die Signatur, weil sie die Sicherheitseigenschaften einer realen 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 Anforderung erhält, lädt es den geheimen AWS-Zugriffsschlüssel, den Sie behaupten zu haben, und verwendet ihn genau so, um aus der empfangenen Nachricht eine Signatur zu berechnen. Anschließend vergleicht es die berechnete Signatur mit der Signatur, die der Anforderer vorgezeigt hat. Stimmen die beiden Signaturen überein, schließt das System daraus, dass der Anforderer Zugriff auf den geheimen AWS-Zugriffsschlüssel hat, und damit mit der Genehmigung des Prinzipals handelt, dem 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 +0000
Authorization: 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 unter Aktions (Aktionen) im AWS Security Token Service-API-Referenzhandbuch.
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: AWS
AWSAccessKeyId
:Signature
Entwicklern wird eine AWS-Zugriffsschlüssel-ID und ein geheimer AWS-Zugriffsschlüssel ausgestellt, wenn sie sich anmelden. 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 das RFC 2104 HMAC-SHA1 ausgewählter Elemente aus der Anforderung, der Signature
-Teil des Authorization-Headers unterscheidet sich deshalb zwischen verschiedenen Anforderungen. Wenn die vom System berechnete Anforderungssignatur mit der in der Anforderung enthaltenen Signature
übereinstimmt, hat der Auftraggeber belegt, dass er den geheimen AWS-Zugriffsschlüssel besitzt. 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 von RFC 2104 - Keyed-Hashing for Message AuthenticationYourSecretAccessKey
) als Schlüssel und die UTF-8-Codierung des StringToSign
als die Meldung. Die Ausgabe von HMAC-SHA1 ist ebenfalls eine Byte-Zeichenfolge, der sogenannte Digest. 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. Wir bezeichnen diesen Prozess, bei dem eine Anforderung in die für die Signatur vereinbarte Form gebracht wird, als Kanonisierung.
Konstruieren des - CanonicalizedResource Elements
CanonicalizedResource
stellt die für die Anfrage relevante Amazon-S3-Ressource dar. Für eine REST-Anforderung erstellen Sie sie wie folgt:
1 |
Beginnen Sie mit einer leeren Zeichenfolge ( |
2 |
Wenn die Anforderung unter Verwendung des HTTP Host-Headers (virtueller gehosteter Stils) einen Bucket angibt, fügen Sie den Bucket-Namen mit vorgestelltem Für die Virtual Hosted-Anforderung „https://awsexamplebucket1.s3.us-west-1.amazonaws.com/photos/puppy.jpg“ lautet die Für die Path-Anforderung „https://s3.us-west-1.amazonaws.com/awsexamplebucket1/photos/puppy.jpg“ lautet |
3 |
Fügen Sie den Pfad-Abschnitt der nicht decodierten HTTP Anforderungs-URI bis zur (aber nicht inklusive der) Abfragezeichenfolge ein. Für die Virtual Hosted-Anforderung „https://awsexamplebucket1.s3.us-west-1.amazonaws.com/photos/puppy.jpg“ lautet die Für die Path-Anforderung „https://s3.us-west-1.amazonaws.com/awsexamplebucket1/photos/puppy.jpg“ lautet die Im Fall einer Anforderung, die sich nicht an einen Bucket richtet, wie GET Service, fügen Sie „/“ an. |
4 |
Wenn sich die Anforderung an eine Subressource richtet, wie beispielsweise Die Subressourcen, die beim Erstellen des CanonicalizedResource Elements enthalten sein 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 Der |
Elemente der CanonicalizedResource , die aus der HTTP Request-URI stammen, sollten so signiert werden, wie sie in der HTTP-Anforderung erscheinen, einschließlich URL-Kodierungsmetazeichen.
Möglicherweise unterschiedet sich die CanonicalizedResource
von der HTTP Anforderungs-URI. Wenn Ihre Anforderung den HTTP-Header Host
verwendet, um einen Bucket anzugeben, erscheint der Bucket nicht in der HTTP Anforderungs-URI. Die CanonicalizedResource
beinhaltet den Bucket jedoch weiterhin. Abfrage-Zeichenfolgenparameter können auch in der Anforderungs-URI erscheinen, sind aber nicht in der enthalte CanonicalizedResource
. Weitere Informationen finden Sie unter Virtuelles Hosting bei Buckets.
Konstruieren des - CanonicalizedAmzHeaders Elements
Um den CanonicalizedAmzHeaders Teil von zu erstellenStringToSign
, wählen Sie alle HTTP-Anforderungsheader aus, die mit „x-amz-“ beginnen (unter Verwendung eines Vergleichs ohne Berücksichtigung der Groß- und Kleinschreibung), und gehen Sie wie folgt vor.
1 | Wandeln Sie jeden HTTP-Headernamen in Kleinbuchstaben um. Beispielsweise wird 'X-Amz-Date ' zu 'x-amz-date '. |
2 | Sortieren Sie die Header alphabetisch nach dem Headernamen. |
3 | Kombinieren Sie Header-Felder mit demselben Namen zu einem „header-name:comma-separated-value-list“-Paar, wie in RFC 2616, Abschnitt 4.2, ohne Leerzeichen zwischen Werten vorgeschrieben. 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. |
4 | „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. |
5 | Löschen Sie alle Leerzeichen um den Doppelpunkt in der Kopfzeile. Beispielsweise würde der Header 'x-amz-meta-username: fred,barney ' zu 'x-amz-meta-username:fred,barney ' |
6 | 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. |
Positionale und benannte HTTP-Header- StringToSign Elemente
Die ersten Header-Elemente von StringToSign
(Content-Type, Date und Content-MD5) sind von ihrer Art her positionsbezogen. StringToSign
fügt nicht die Namen dieser Header, sondern nur ihre Werte aus der Anforderung ein. 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 eines der RFC 2616-Formate haben (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 StringToSign
s 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 die den Bucket-Namen CanonicalizedResource enthält, die HTTP Request-URI jedoch 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 die Schlüssel und StringToSign nach Bedarf 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 Anforderung und in der StringToSign. Beachten Sie auch, dass Content-MD5 in der leer gelassen wird StringToSign, da es in der Anforderung nicht vorhanden ist.
Auflisten
In diesem Beispiel wird der Inhalt des Buckets „awsexamplebucket1“ aufgelistet.
Anforderung | StringToSign |
---|---|
|
|
Notieren Sie sich den abschließenden Schrägstrich in der CanonicalizedResource und das Fehlen von Abfragezeichenfolgeparametern.
Fetch
In diesem Beispiel wird die Zugriffskontrollrichtlinien-Subressource für den Bucket „awsexamplebucket1“ abgerufen.
Anforderung | StringToSign |
---|---|
|
|
Beachten Sie, wie der Subressourcen-Abfragezeichenfolgeparameter in der enthalten ist CanonicalizedResource.
Löschen
In diesem Beispiel wird ein Objekt über die path-style- und Date-Alternative aus dem Bucket „awsexamplebucket1“ entfernt.
Anforderung | StringToSign |
---|---|
|
|
Beachten Sie, wie wir die alternative Methode „x-amz-date“ zur Angabe des Datums verwendet haben (weil unsere Client-Bibliothek verhindert hat, dass wir das Datum festlegen konnten, z. B. ). 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 ebenfalls, dassCanonicalizedResource
den Bucket-Namen beinhaltet, die HTTP Anforderungs-URI dagegen nicht. (Der Bucket wird vom Host-Header spezifiziert.)
Auflisten aller meiner Buckets
Anforderung | StringToSign |
---|---|
|
|
Unicode-Schlüssel
Anforderung | StringToSign |
---|---|
|
|
Anmerkung
Die Elemente in StringToSign
, die von der Anforderungs-URI abgeleitet wurden, werden unverändert übernommen, einschließlich der URL-Codierung und der 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 zum Authentifizieren von Anforderungn finden Sie unter Authentifizieren von Anforderungn: Verwenden von Abfrageparametern (AWS Signature Version 4) in der Amazon Simple Storage Service API-Referenz. Beispiele für die Verwendung von AWS SDKs zum Generieren vorsignierter URLs finden Sie unter Gemeinsame Nutzung von Objekten mit vorsignierten URLs.
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 | Beschreibung |
---|---|---|
AWSAccessKeyId |
AKIAIOSFODNN7EXAMPLE |
Ihre AWS-Zugriffsschlüssel-ID Gibt den geheimen AWS-Zugriffsschlüssel an, der verwendet wurde, um die Anforderung zu signieren, und somit indirekt die Identität des Entwicklers, der die Anforderung gestellt hat. |
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 des 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;
YourSecretAccessKey
ist die ID des geheimen AWS-Zugriffsschlüssels, die Ihnen Amazon zuordnet, wenn Sie sich als Amazon-Web-Services-Entwickler anmelden. Beachten Sie, wie die Signature
URL-codiert wird, damit sie für die Platzierung im Abfragestring 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 |
---|---|
|
|
Wir gehen davon aus, dass ein Browser bei einer GET-Anforderung keinen Content-MD5- oder Content-Type-Header bereitstellt, und auch keine x-amz--Header einrichten, diese Teile von StringToSign
bleiben deshalb leer.
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.