6 Stimmen

Einrichten von Twitter OAuth ohne Bibliotheken von Drittanbietern

Fortsetzung von Holen Sie sich Twitter öffentliche Timeline, json + C #, keine 3rd-Party-Bibliotheken

Ich bin immer noch neu in C# und oAuth so bitte mit mir, wenn ich nicht alles zu verstehen

Ich habe eine C#-Klasse namens oAuthClass erstellt, und dies sind die Variablen, die ich derzeit habe:

    static class oAuthClass
{
    public static void run()
    {
        int oauth_timestamp = GetTimestamp(DateTime.Now);
        string oauth_nonce = PseudoRandomStringUsingGUID();
        string oauth_consumer_key = "consumer key here";
        string oauth_signature_method = "HMAC-SHA1";
        string oauth_version = "1.0";
    }
}

Ich habe auf OAuth-Signaturen gelesen, und ich entschied mich für HMAC-SHA1 für jetzt verwenden, ich weiß nicht, wie die Signatur zu generieren, ich bin auch extrem verwirrt nach dem Lesen und sehen Sachen wie HTTP-Encodings und Base-Strings und was nicht (ich habe keine Ahnung, was sie überhaupt bedeuten), aber meine Vermutung ist, eine URL zu erstellen, die "Http-encoded", wie Leerzeichen->"%20" ist?

Zusammengefasst: -Was sind Basisstrings?

-Liege ich mit dem Beispiel der Leerzeichen->%20 richtig?

-HMAC-SHA1 beinhaltet eine Nachricht und einen Schlüssel, ist das Verbrauchergeheimnis die Nachricht? Ist der Verbraucherschlüssel dann der Schlüssel?

Wie man eine Signatur mit Hilfe des HMAC-SHA1-Algorithmus erstellt

-Wenn es mir gelingt, die Signatur zu erstellen, wie übergebe ich dann diese Werte an Twitter?

Ich könnte Folgendes gebrauchen

http://example.com?consumer_key=asdf&oauth_signature=signaturevalue&etc., 

aber ich habe gelesen und anscheinend verwenden die Leute HTTP-Header oder so etwas (wieder, ich weiß nicht wirklich, was das ist)

Ich danke Ihnen! Nochmals, keine Bibliotheken von Drittanbietern erlaubt :(

14voto

Jon Nylander Punkte 8533

Es ist wirklich schwer, Ihre Frage kurz zu beantworten, da die Implementierung eines vollwertigen OAuth-Clients nicht trivial ist und ein tiefes Verständnis der OAuth1.0a-Spezifikation erfordert. Es ist keine Raketenwissenschaft, aber es erfordert wirklich das Aussortieren aller Bits und Teile.

Ich werde versuchen, Ihre Frage stückchenweise zu beantworten.

Was sind Basisstrings?

Eine Signatur-Basiszeichenfolge in OAuth ist wie folgt aufgebaut:

  • Beginnen Sie mit der HTTP-Methode der Anfrage, die Sie senden, in Großbuchstaben. z.B. POST o GET .
  • Fügen Sie ein kaufmännisches Und ( & ) Zeichen zu diesem
  • Fügen Sie die kodierte (prozentual kodierte) URL hinzu, die Sie in Ihrer Anfrage aufrufen (fügen Sie hier keine Parameter ein)
  • Fügen Sie ein weiteres kaufmännisches Und ( & ) Zeichen hier
  • Fügen Sie abschließend die URL-kodierte Parameterzeichenfolge hinzu

In diesem letzten Schritt wird beschrieben, wie Sie die benötigte Parameterzeichenfolge erstellen.

Sammeln Sie alle in der Anfrage enthaltenen Parameter. Sie finden sie entweder in der URL als Teil des Query-Strings und auch im Request-Body, wenn Sie POST -Anfragen. Sagen wir zum Beispiel, Sie sind POST -Einstellung des Parameters parameter1=value1 zur URL http://example.com/?parameter2=value2 . Das macht zwei Parameter, die einbezogen werden müssen.

Jetzt müssen Sie auch alle OAuth-Parameter zusammenfassen, die für das Protokoll erforderlich sind, um zufrieden zu sein. Diese würden zu einer Parameterliste führen, die etwa so aussieht:

  • oauth_consumer_key=fffffaaaafffaaaff
  • oauth_nonce=aaaaabbbbbcccccaaaaudi2313
  • oauth_signature_method=HMAC-SHA1
  • oauth_timestamp=1319633599
  • oauth_token=bbbbbbbbbfsdfdsdfsfserwerfsddffdsdf
  • oauth_version=1.0
  • parameter1=value1
  • parameter2=value2

Alle diese einzelnen Zeichenfolgen müssen nach dem Parameternamen lexikografisch sortiert werden (alphabetisch sollte ausreichen) und zu einer Zeichenfolge verkettet werden. Das ist Ihre Parameterzeichenkette.

Liege ich mit dem Beispiel der Räume->%20 richtig?

Ja. Sie sprechen von der prozentualen Kodierung, die auch als HTTP-Kodierung und URL-Kodierung bezeichnet wird. http://en.wikipedia.org/wiki/Percent-encoding .

HMAC-SHA1 beinhaltet eine Nachricht und einen Schlüssel, ist die Nachricht für den Verbraucher geheim? Ist der Verbraucherschlüssel dann der Schlüssel?

Die Nachricht ist die Zeichenkette, die Sie oben erstellt haben. Und der Schlüssel ist die Kombination aus dem Geheimnis Ihres Verbrauchers und dem Geheimnis Ihres Zugangstokens. Der Schlüssel sollte also wie folgt aussehen: CONSUMER_SECRET&TOKEN_SECRET (beachten Sie das kaufmännische Und). Bei der allerersten Anfrage, die Sie stellen, haben Sie noch kein Token-Geheimnis, dann ist der Schlüssel nur CONSUMER_SECRET& (beachten Sie auch hier das kaufmännische Und).

Wie man eine Signatur mit Hilfe des HMAC-SHA1-Algorithmus erstellt.

Ich habe dies von http://oauth.googlecode.com/svn/code/csharp/OAuthBase.cs und es wird davon ausgegangen, dass die Geheimnisse und die Basiszeichenfolge für den Code verfügbar sind.

Füttern Sie eine HMACSHA1-Instanz mit einem Schlüssel und einer Nachricht, rendern Sie den Hash und konvertieren Sie ihn in einen base64-String.

HMACSHA1 hmacsha1 = new HMACSHA1();
hmacsha1.Key = Encoding.ASCII.GetBytes(string.Format("{0}&{1}", UrlEncode(consumerSecret), string.IsNullOrEmpty(tokenSecret) ? "" : UrlEncode(tokenSecret)));
byte[] dataBuffer = System.Text.Encoding.ASCII.GetBytes(signatureBaseString);
byte[] hashBytes = hmacsha1.ComputeHash(dataBuffer);

return Convert.ToBase64String(hashBytes);

Wenn es mir gelingt, die Signatur zu erstellen, wie übergebe ich dann diese Werte an Twitter?

Sie sollten leicht herausfinden können, was ein HTTP-Header ist.

Sie können jedoch das Endergebnis der Parameter und der Signatur in die URL einfügen. Ich glaube, Twitter akzeptiert sie bei einigen Anfragen sogar im Request Body. Aber der bevorzugte Weg ist über die Authorization HTTP-Header, da er eine klare Trennung zwischen protokollspezifischen und anfragespezifischen Parametern ermöglicht.

Es sollte in etwa so aussehen (direkt aus der OAuth 1.0a Spezifikation ):

Authorization: OAuth realm="Example",
    oauth_consumer_key="0685bd9184jfhq22",
    oauth_token="ad180jjd733klru7",
    oauth_signature_method="HMAC-SHA1",
    oauth_signature="wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D",
    oauth_timestamp="137131200",
    oauth_nonce="4572616e48616d6d65724c61686176",
    oauth_version="1.0"

0voto

Ryan Drost Punkte 1084

Wenn Sie wirklich verwirrt sind und einfach nur eine einfache Bibliothek verwenden möchten, würde ich vorschlagen, dass Sie sich mit Twitterizer

In der Dokumentation gibt es Beispiele, und die Einrichtung ist ziemlich einfach.

[EDIT] oops, sorry, habe gerade gelesen, dass Sie nicht auf der Suche nach 3rd Party Bibliotheken sind. Entschuldigung

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X