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"