Zum Hauptinhalt springen

Erstellen einer Signatur

Diese Seite erklärt, wie eine OAuth 1.0a HMAC-SHA1-Signatur für eine HTTP-Anfrage generiert wird. Diese Signatur eignet sich zur Übergabe an die X API als Teil einer autorisierten Anfrage, wie in Autorisieren einer Anfrage beschrieben. Die Anfrage, anhand derer das Signieren demonstriert wird, ist ein POST an https://api.x.com/1.1/statuses/update.json. Die Rohanfrage sieht folgendermaßen aus:
POST /1.1/statuses/update.json?include_entities=true HTTP/1.1
Accept: */*
Connection: close
User-Agent: OAuth gem v0.4.4
Content-Type: application/x-www-form-urlencoded
Content-Length: 76
Host: api.x.com

status=Hello%20Ladies%20%2b%20Gentlemen%2c%20a%20signed%20OAuth%20request%21
Erfassen der Anfragemethode und URL Um eine Signatur zu erzeugen, beginnen Sie damit, die HTTP-Methode und die URL der Anfrage zu bestimmen. Diese beiden Werte sind beim Erstellen der Anfrage bekannt und daher leicht zu ermitteln. Die Anfragemethode ist bei X API-Anfragen fast immer GET oder POST.
HTTP MethodPOST
Die Basis-URL ist die URL, an die die Anfrage gesendet wird, abzüglich etwaiger query-String- oder hash-Parameter. Es ist wichtig, hier das korrekte Protokoll zu verwenden. Stellen Sie daher sicher, dass der „https://“-Teil der URL mit der tatsächlich an die API gesendeten Anfrage übereinstimmt.
Base URLhttps://api.x.com/1.1/statuses/update.json

Sammeln von Parametern

Sammeln Sie als Nächstes alle Parameter, die in der Anfrage enthalten sind. Es gibt zwei Orte für diese zusätzlichen Parameter – die URL (als Teil der query-Zeichenkette) und den Request-Body. Die Beispielanfrage enthält an beiden Stellen jeweils einen einzelnen Parameter:
POST /1.1/statuses/update.json?include_entities=true HTTP/1.1
Accept: */*
Connection: close
User-Agent: OAuth gem v0.4.4
Content-Type: application/x-www-form-urlencoded
Content-Length: 76
Host: api.x.com

status=Hello%20Ladies%20%2b%20Gentlemen%2c%20a%20signed%20OAuth%20request%21
Eine HTTP-Anfrage enthält Parameter, die URL-codiert sind, aber Sie sollten die Rohwerte erfassen. Zusätzlich zu den Anfrageparametern muss jeder oauth_*-Parameter in die Signatur aufgenommen werden, also erfassen Sie diese ebenfalls. Hier sind die Parameter aus Autorisieren einer Anfrage:
statusHello Ladies + Gentlemen, a signed OAuth request!
include_entitiestrue
oauth_consumer_keyxvz1evFS4wEEPTGEFPHBog
oauth_noncekYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg
oauth_signature_methodHMAC-SHA1
oauth_timestamp1318622958
oauth_token370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb
oauth_version1.0
Diese Werte müssen zu einer einzelnen Zeichenfolge kodiert werden, die später verwendet wird. Der Prozess zum Aufbau der Zeichenfolge ist sehr spezifisch:
  1. Prozentkodieren Sie jeden Schlüssel und jeden Wert, der signiert wird.
  2. Sortieren Sie die Liste der Parameter alphabetisch [1] nach dem kodierten Schlüssel [2].
  3. Für jedes Schlüssel/Wert-Paar:
  4. Hängen Sie den kodierten Schlüssel an die Ausgabestring an.
  5. Hängen Sie das Zeichen „=“ an die Ausgabestring an.
  6. Hängen Sie den kodierten Wert an die Ausgabestring an.
  7. Wenn weitere Schlüssel/Wert-Paare verbleiben, hängen Sie ein „&“-Zeichen an die Ausgabestring an.  
[1] Die OAuth-Spezifikation schreibt eine lexikografische Sortierung vor, was bei vielen Bibliotheken der standardmäßigen alphabetischen Sortierung entspricht. [2] Falls zwei Parameter denselben kodierten Schlüssel haben, schreibt die OAuth-Spezifikation vor, die Sortierung anhand des Werts fortzusetzen. X akzeptiert jedoch keine doppelten Schlüssel in API-Anfragen   Parameterzeichenfolge Die folgende Parameterzeichenfolge wird erzeugt, indem diese Schritte mit den oben erfassten Parametern wiederholt werden:
statusHello Ladies + Gentlemen, a signed OAuth request!
include_entitiestrue
oauth_consumer_keyxvz1evFS4wEEPTGEFPHBog
oauth_noncekYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg
oauth_signature_methodHMAC-SHA1
oauth_timestamp1318622958
oauth_token370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb
oauth_version1.0

Erstellen der Signatur-Basiszeichenfolge

Die drei bisher erfassten Werte müssen zu einer einzelnen Zeichenfolge zusammengeführt werden, aus der die Signatur generiert wird. In der OAuth-Spezifikation wird dies als Signatur-Basiszeichenfolge bezeichnet. So kodieren Sie die HTTP-Methode, die Basis-URL und die Parameterzeichenfolge in eine einzige Zeichenfolge:
  1. Wandeln Sie die HTTP-Methode in Großbuchstaben um und setzen Sie die Ausgabezeichenfolge auf diesen Wert.
  2. Hängen Sie das Zeichen ‘&’ an die Ausgabezeichenfolge an.
  3. Prozentkodieren Sie die URL und hängen Sie sie an die Ausgabezeichenfolge an.
  4. Hängen Sie das Zeichen ‘&’ an die Ausgabezeichenfolge an.
  5. Prozentkodieren Sie die Parameterzeichenfolge und hängen Sie sie an die Ausgabezeichenfolge an.  
Dadurch entsteht die folgende Signatur-Basiszeichenfolge:
POST&https%3A%2F%2Fapi.x.com%2F1.1%2Fstatuses%2Fupdate.json&include\_entities%3Dtrue%26oauth\_consumer\_key%3Dxvz1evFS4wEEPTGEFPHBog%26oauth\_nonce%3DkYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg%26oauth\_signature\_method%3DHMAC-SHA1%26oauth\_timestamp%3D1318622958%26oauth\_token%3D370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb%26oauth_version%3D1.0%26status%3DHello%2520Ladies%2520%252B%2520Gentlemen%252C%2520a%2520signed%2520OAuth%2520request%2521
Stellen Sie sicher, dass Sie die Parameterzeichenfolge prozentkodieren. Die Signatur-Basiszeichenfolge sollte genau zwei kaufmännische Unds („&“) enthalten. Die Prozentzeichen („%“) in der Parameterzeichenfolge sollten in der Signatur-Basiszeichenfolge als %25 kodiert werden.

Einen Signierschlüssel erhalten

Die letzten zu sammelnden Informationen sind vertrauliche Werte, die die X App, die die Anfrage stellt, sowie den Nutzer, in dessen Namen die Anfrage erfolgt, identifizieren. Es ist äußerst wichtig zu beachten, dass diese Werte hochsensibel sind und niemals weitergegeben werden dürfen. Der Wert, der Ihre App gegenüber X identifiziert, heißt Consumer Secret und kann im Entwicklerportal auf der App-Detailseite gefunden werden. Dieser ist für jede Anfrage gleich, die Ihre X App sendet.
Consumer SecretkAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw
Der Wert, der das Konto identifiziert, in dessen Namen Ihre Anwendung handelt, heißt OAuth Token Secret. Dieser Wert kann auf mehrere Arten erhalten werden, die alle in Obtaining access tokens beschrieben sind.
OAuth Token SecretLswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE
Auch hier ist es sehr wichtig, diese Werte innerhalb Ihrer Anwendung vertraulich zu behandeln. Wenn Sie den Eindruck haben, dass Ihre Werte kompromittiert wurden, generieren Sie Ihre Token neu (die Token auf dieser Seite wurden für echte Anfragen als ungültig markiert). Beide Werte müssen kombiniert werden, um einen Signierschlüssel zu bilden, der zur Generierung der Signatur verwendet wird. Der Signierschlüssel ist einfach das prozentkodierte Token-Secret: Beachten Sie, dass es einige Abläufe gibt, z. B. beim Abrufen eines Request Token, bei denen das Token-Secret noch nicht bekannt ist. In diesem Fall sollte der Signierschlüssel aus dem prozentkodierten Consumer Secret gefolgt von einem kaufmännischen Und-Zeichen „&“ bestehen.
Signing KeykAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw&LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE

Berechnung der Signatur

Die Signatur wird berechnet, indem die Signatur-Basiszeichenfolge und der Signierschlüssel an den HMAC-SHA1-Hashing-Algorithmus übergeben werden. Die Details des Algorithmus sind in der Funktion hash_hmac erläutert. Die Ausgabe der HMAC-Signierfunktion ist eine Binärzeichenfolge. Diese muss base64-codiert werden, um die Signaturzeichenfolge zu erhalten. Für die auf dieser Seite angegebene Basiszeichenfolge und den Signierschlüssel lautet die Ausgabe beispielsweise 2E CF 77 84 98 99 6D 0D DA 90 5D C7 17 7C 75 07 3F 3F CD 4E. Dieser Wert ist, in base64 umgewandelt, die OAuth-Signatur für diese Anfrage:
OAuth-SignaturLs93hJiZbQ3akF3HF3x1Bz8/zU4=
I