2012-05-21 13 views
6

Continuazione da Get twitter public timeline, json+C#, no 3rd party librariesImpostazione Twitter OAuth senza biblioteche 3rd party

Sono ancora nuovo per C# e oAuth quindi per favore abbiate pazienza con me, se non riesco a capire nulla

Ho creato una classe C# denominata oAuthClass, e queste sono le variabili io attualmente ho:

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"; 
    } 
} 

ho letto su OAuth firme, e ho scelto di utilizzare HMAC-SHA1, per ora, non so come generare la firma, ho Sono anche estremamente confuso dopo aver letto e visto cose come HTTP- Encodings e Base-Strings e quant'altro (non ho idea di cosa significhi affatto), ma la mia ipotesi è di creare un URL che sia "Http-encoded", like spaces -> "% 20"?

In breve: -Che sono le stringhe di base?

-Acc ho ragione sugli spazi ->% 20 esempio?

-HMAC-SHA1 comprende un messaggio e una chiave, il consumatore segna il messaggio? La chiave del consumatore è quindi la chiave?

-Come creare una firma attraverso l'uso dell'algoritmo HMAC-SHA1

-Se io riesco a creare la firma, come faccio a passare questi valori a Twitter?

ho potuto utilizzare

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

ma ho letto ea quanto pare la gente utilizzare HTTP-Header o qualcosa del genere (di nuovo, io non so di cosa si tratta)

Grazie! Anche in questo caso, nessuna libreria 3rd party consentito :(

risposta

14

E 'davvero difficile rispondere alla tua domanda in modo breve, dal momento che l'attuazione di un cliente in piena regola OAuth non è banale e richiede veramente la comprensione della specifica OAuth1.0a. Non è rock e scienza, ma in realtà richiede la classificazione di tutti i frammenti.

Cercherò di rispondere alla tua domanda in modo frammentario.

Quali sono le stringhe di base?

Una stringa di base firma nella OAuth è costruito in questo modo:

  • Inizia con il metodo HTTP della richiesta vostra sta inviando, in maiuscolo. E.g POST o GET.
  • Aggiungere una e commerciale (&) personaggio a quello
  • Aggiungere l'URL codificato (cento codificato) URL si sta chiamando nella richiesta (non includere i parametri qui)
  • aggiungere ancora un'altra (&) carattere e commerciale qui
  • Infine aggiungere l'URL codificato stringa di parametri

mi descrivono come creare la stringa di parametro è necessario in questo ultimo passo.

Raccogliere tutti i parametri inclusi nella richiesta. Li troverai nell'URL come parte della stringa di query e anche nel corpo della richiesta quando ti trovi nelle richieste POST -ing. Supponi ad esempio che tu sia POST -ing il parametro parameter1=value1 all'URL http://example.com/?parameter2=value2. Questo rende due parametri da includere.

Ora è necessario sommare tutti i parametri OAuth necessari per la felicità del protocollo. Questi porterebbero a una lista di parametri cercando qualcosa di simile:

  • 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

Tutte queste singole stringhe devono essere ordinati lessicografico sul nome del parametro (in ordine alfabetico dovrebbe essere sufficiente), e concatenati in una stringa. Questa è la tua stringa di parametri.

ho ragione sugli spazi ->% 20 esempio?

Sì. Stai parlando di codifica percentuale, che va anche sotto il nome di codifica HTTP e codifica URL. http://en.wikipedia.org/wiki/Percent-encoding.

HMAC-SHA1 comprende un messaggio e una chiave, il consumatore segna il messaggio? La chiave del consumatore è quindi la chiave?

Il messaggio è la stringa di base della firma creata in precedenza. E la chiave è la combinazione del segreto del consumatore e del segreto del tuo token di accesso. Quindi la chiave dovrebbe apparire così: CONSUMER_SECRET&TOKEN_SECRET (notare la e commerciale). Nella prima richiesta assoluta che si fa non si avrà ancora un token segreto, quindi la chiave è solo CONSUMER_SECRET& (di nuovo, si noti la e commerciale).

Come creare una firma mediante l'utilizzo dell'algoritmo HMAC-SHA1.

Ho recuperato questo da http://oauth.googlecode.com/svn/code/csharp/OAuthBase.cs e si presume che i segreti e la stringa di base siano disponibili per il codice.

Fondamentalmente alimentare un'istanza HMACSHA1 con una chiave e un messaggio, eseguire il rendering dell'hash e convertirlo in una stringa base64.

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); 

Se io riesco a creare la firma, come faccio a passare questi valori a Twitter?

Si dovrebbe essere facilmente in grado di ricercare cos'è un'intestazione HTTP.

Ma è possibile scegliere di aggiungere il risultato finale dei parametri e della firma all'URL, penso che Twitter li accetti persino nel corpo della richiesta su alcune richieste. Ma il modo preferito è attraverso l'intestazione HTTP Authorization poiché consente una chiara separazione tra specifici del protocollo e parametri specifici della richiesta.

Dovrebbe apparire un po 'come questo (preso direttamente dalla OAuth 1.0a spec):

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" 
+0

Grazie, questo è molto più di quanto avrei potuto chiedere! Cercherò di fare il possibile per farlo funzionare. Se avessi ulteriori problemi (ancora legati a questa domanda) dovrei iniziare una nuova domanda o continuare a chiedere qui? Proverò prima di chiedere però! Inoltre, come si contrassegna una domanda come risolta o è sufficiente il ticchettio di una risposta? Ancora una volta, grazie per questo post! Spero che aiuti altre persone a tentare di fare lo stesso :) – Maddermatics

+0

Commenta qui se ti trovi nei guai e cercherò di aiutarti. Possiamo anche usare la funzione chat. Inoltre, le risorse di sviluppo di twitter sono d'oro, usale per imparare sia su OAuth che sulle loro API. –

+0

http://oi45.tinypic.com/6e0mcl.jpg - Screenshot della baseString e dell'hash codificato nell'URL È tutto corretto fino a questo punto? Sto ancora solo cercando di ottenere la parte request_token per ora Immagino che le intestazioni HTTP siano un posto per le coppie chiave-valore? Non sono del tutto sicuro di come creare quelli, però, creare un nuovo oggetto httpwebrequest, quindi ...? – Maddermatics

0

Se siete veramente confuso e vogliono solo una semplice libreria da usare Vorrei suggerire di guardare in Twitterizer

Ci documentazione deve esempi ed è abbastanza facile da configurare.

[EDIT] oops, scusate appena letto che non siete alla ricerca per le biblioteche 3rd party. Siamo spiacenti

+0

ho avuto successo con l'utilizzo di Twitterizer prima, ma capito che non potevo utilizzare le librerie 3a parte nel mio progetto solo recentemente così .. Sai il resto, grazie! – Maddermatics

Problemi correlati