Zum Hauptinhalt springen

Autorisieren einer Anfrage

Ziel dieses Dokuments ist es, zu zeigen, wie Sie HTTP-Anfragen anpassen, um autorisierte Anfragen an die X API zu senden. Alle APIs von X basieren auf dem HTTP-Protokoll. Das bedeutet, dass jede von Ihnen geschriebene Software, die die APIs von X verwendet, eine Reihe strukturierter Nachrichten an die Server von X sendet. Beispielsweise sieht eine Anfrage, um den Text „Hello Ladies + Gentlemen, a signed OAuth request!“ als Tweet zu posten, ungefähr so 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
Jede HTTP-Bibliothek sollte in der Lage sein, die obenstehende Anfrage mit minimalem Aufwand zu erstellen und abzusetzen. Die obenstehende Anfrage gilt jedoch als ungültig, da sich nicht feststellen lässt:
  1. Welche Anwendung die Anfrage stellt
  2. Für welchen Nutzer die Anfrage im Namen des Nutzers einen Post absetzt
  3. Ob der Nutzer der Anwendung die Autorisierung erteilt hat, in seinem Namen zu posten
  4. Ob die Anfrage während der Übertragung von Dritten manipuliert wurde
Damit Anwendungen diese Informationen bereitstellen können, stützt sich die API von X auf das OAuth 1.0a-Protokoll. Auf stark vereinfachter Ebene erfordert die Implementierung von X, dass Anfragen, die eine Autorisierung benötigen, einen zusätzlichen HTTP-Authorization-Header enthalten, der genügend Informationen liefert, um die oben aufgeführten Fragen zu beantworten. Eine Version der oben gezeigten HTTP-Anfrage, die so geändert wurde, dass dieser Header enthalten ist, sieht wie folgt aus (normalerweise müsste der Authorization-Header in einer Zeile stehen, wurde hier jedoch der Lesbarkeit halber umbrochen):
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
Authorization:
OAuth oauth\_consumer\_key="xvz1evFS4wEEPTGEFPHBog",
oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg",
oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D",
oauth\_signature\_method="HMAC-SHA1",
oauth_timestamp="1318622958",
oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb",
oauth_version="1.0"
Content-Length: 76
Host: api.x.com

status=Hello%20Ladies%20%2b%20Gentlemen%2c%20a%20signed%20OAuth%20request%21
Als diese Anforderung erstellt wurde, wäre sie von der X API als gültig akzeptiert worden. Wenn sich dieser Signaturprozess so anhört, als läge er außerhalb des Umfangs Ihrer Integration, sollten Sie Web Intents in Betracht ziehen, die kein OAuth benötigen, um mit der X API zu interagieren.   Parameter erfassen Sie sollten erkennen können, dass der Header 7 Schlüssel/Wert-Paare enthält, bei denen alle Schlüssel mit der Zeichenfolge „oauth_“ beginnen. Für jede X API-Anforderung ermöglicht das Erfassen dieser 7 Werte und das Erstellen eines entsprechenden Headers, die Autorisierung für die Anforderung anzugeben. Wie jeder Wert erzeugt wurde, wird unten beschrieben: Consumer Key Der oauth_consumer_key identifiziert, welche Anwendung die Anforderung stellt. Sie erhalten diesen Wert auf der Einstellungsseite Ihrer X App im Entwicklerportal.
oauth_consumer_keyxvz1evFS4wEEPTGEFPHBog
Nonce Der Parameter oauth_nonce ist ein eindeutiges Token, das Ihre Anwendung für jede einzelne Anforderung generieren sollte. X verwendet diesen Wert, um festzustellen, ob eine Anforderung mehrfach eingereicht wurde. Der Wert für diese Anforderung wurde erzeugt, indem 32 Bytes zufälliger Daten base64-codiert und alle Nichtwortzeichen entfernt wurden; jeder Ansatz, der eine ausreichend zufällige alphanumerische Zeichenfolge erzeugt, ist hier jedoch in Ordnung.
oauth_noncekYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg
Signatur Der Parameter oauth_signature enthält einen Wert, der erzeugt wird, indem alle übrigen Anfrageparameter sowie zwei geheime Werte durch einen Signaturalgorithmus geführt werden. Die Signatur ermöglicht es X zu überprüfen, dass die Anfrage unterwegs nicht verändert wurde, die anfragende Anwendung zu identifizieren und zu verifizieren sowie zu bestätigen, dass die Anwendung berechtigt ist, mit dem Konto des Nutzers zu interagieren. Der Prozess zur Berechnung der oauth_signature für diese Anfrage wird unter Erstellen einer Signatur beschrieben.
oauth_signaturetnnArxj06cWHq44gCs1OSKk/jLY=
Signaturmethode Die von X verwendete oauth_signature_method ist HMAC-SHA1. Dieser Wert sollte für jede autorisierte Anfrage an die X API verwendet werden.
oauth_signature_methodHMAC-SHA1
Zeitstempel Der Parameter oauth_timestamp gibt an, wann die Anfrage erstellt wurde. Dieser Wert sollte die Anzahl der Sekunden seit der Unix-Epoche zum Zeitpunkt der Generierung der Anfrage sein und lässt sich in den meisten Programmiersprachen leicht erzeugen. X lehnt Anfragen ab, die zu weit in der Vergangenheit erstellt wurden. Daher ist es wichtig, die Uhr des Computers, der Anfragen generiert, mit NTP zu synchronisieren.
oauth_timestamp1318622958
Token Der Parameter oauth_token steht in der Regel für die Zustimmung eines Nutzers, Ihrer Anwendung den Zugriff auf sein Konto zu gewähren. Es gibt einige Authentifizierungsanfragen, bei denen dieser Wert nicht übergeben wird oder eine andere Form von Token ist; diese werden ausführlich unter Obtaining access tokens behandelt. Für die meisten allgemeingültigen Anfragen verwenden Sie ein sogenanntes access token. Sie können ein gültiges access token für Ihr Konto auf der Einstellungsseite Ihrer X App im Entwicklerportal erzeugen.
oauth_token370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb
Version Der Parameter oauth_version sollte für jede an die X API gesendete Anfrage stets 1.0 sein.
oauth_version1.0

Aufbau der Header-Zeichenkette

Um die Header-Zeichenkette zu erstellen, stellen Sie sich vor, in eine Zeichenkette namens DST zu schreiben.
  1. Hängen Sie die Zeichenkette „OAuth “ (einschließlich des Leerzeichens am Ende) an DST an.
  2. Für jedes Schlüssel-Wert-Paar der oben aufgeführten 7 Parameter:
    1. Prozentkodieren Sie den Schlüssel und hängen Sie ihn an DST an.
    2. Hängen Sie das Gleichheitszeichen „=“ an DST an.
    3. Hängen Sie ein doppeltes Anführungszeichen „““ an DST an.
    4. Prozentkodieren Sie den Wert und hängen Sie ihn an DST an.
    5. Hängen Sie ein doppeltes Anführungszeichen „““ an DST an.
    6. Wenn weitere Schlüssel-Wert-Paare verbleiben, hängen Sie ein Komma „,“ und ein Leerzeichen „ “ an DST an.
Achten Sie beim Aufbau dieser Zeichenkette besonders auf die Prozentkodierung der Werte. Beispielsweise muss der oauth_signature-Wert von tnnArxj06cWHq44gCs1OSKk/jLY= als tnnArxj06cWHq44gCs1OSKk%2FjLY%3D kodiert werden. Die Durchführung dieser Schritte mit den oben erfassten Parametern ergibt die folgende Zeichenkette:
OAuth oauth\_consumer\_key="xvz1evFS4wEEPTGEFPHBog", oauth\_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", oauth\_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D", oauth\_signature\_method="HMAC-SHA1", oauth\_timestamp="1318622958", oauth\_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb", oauth_version="1.0"
Dieser Wert sollte als Authorization-Header in der Anforderung festgelegt werden.
I