2011-07-29 6 views
6

Sono riuscito a ottenere un token di accesso attraverso il processo OAuth.Ottenere "Impossibile autenticare con OAuth". da Twitter durante il tentativo di POST

Tuttavia, quando provo a eseguire un POST sull'endpoint /statuses/update.json, viene visualizzato il messaggio "Impossibile autenticare con OAuth".

Sto firmando con il token che sono tornato dall'autenticazione con il mio segreto utente, non capisco cos'altro potrebbe essere.

I forum di Twitter non sono stati di alcun aiuto.

Qualsiasi consiglio sarebbe molto apprezzato.

+0

Innanzitutto, prova alcune richieste GET con le tue chiavi (qualcosa come status/home_timeline che richiede l'autenticazione). Funziona? – Shcheklein

+10

Assicurati che l'orologio del tuo server sia sincronizzato con Twitter o con un altro server orario ben noto. Se mancano più di 15 minuti, Twitter dirà la firma sbagliata e fallirà. –

+1

stavo sperimentando lo stesso problema (c/liboauth/maemo5) - tutto scorreva bene fino a ottenere il token di accesso (con il nome dello schermo, ecc) - ma quando ho fatto una chiamata di riposo (anche solo una lettura) ho ottenuto lo stesso errore ... leggendo il commento di Eran ho notato che l'orologio del vm in cui stavo lavorando era un'ora fuori! e ora funziona :) così, Grazie Eran - il tuo commento dovrebbe essere una risposta, +1. – fusi

risposta

0

Effettuare chiamate autenticate su Twitter può essere un problema.

Assicurarsi che i parametri nella stringa di base della firma siano ordinati alfabeticamente.

Prendete questo:

oauth_consumer_key={consumerkey}&oauth_nonce={nonce}&oauth_signature_method=HMAC-SHA1&oauth_timestamp={timestamp}&oauth_token={token}&oauth_version=1.0&status={tweet text} 

compilare i valori, la codifica in Base64, e poi mettere insieme in questo modo:

POST&{base64 encoded url}&{base64 encoded base string} 

questa sarà la stringa è necessario accedere (senza le parentesi). (L'URL in questo caso sarà https://api.twitter.com/1.1/statuses/update.json)

la firma chiave deve essere costruita in questo modo:

{consumer secret}&{token secret} 

La firma è un hash HMACSHA1, che viene poi codificato in base64.

allora avete bisogno di mettere questo nella intestazione di autorizzazione:

OAuth oauth_consumer_key="{consumer key}",oauth_nonce="{nonce}",oauth_signature="{signature}",oauth_signature_method="HMAC-SHA1",oauth_timestamp="{timestamp}",oauth_token="{token}",oauth_version="1.0" 

E finalmente mettere status=your tweet text come i dati pubblicati nella vostra richiesta.

Spero che questo aiuti.

Problemi correlati