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"
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
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. –
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