2010-09-08 3 views
5

Il mio codice di seguito restituisce un errore Unauthorized 401 ogni volta al questo punto:401 non autorizzato utilizzando Yahoo OAuth

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://query.yahooapis.com/v1/yql?q=select%20fields.value%20from%20social.contacts%20where%20guid%3Dme&diagnostics=false"); 
request.Headers.Add(
    "Authorization: OAuth " + 
    "realm=\"" + "yahooapis.com" + "\"," + 
    "oauth_consumer_key=\"" + ConfigurationManager.AppSettings["yahoo_oauth_consumer_key"] + "\"," + 
    "oauth_nonce=\"" + Guid.NewGuid().ToString() + "\"," + 
    "oauth_signature_method=\"" + "PLAINTEXT" + "\"," + 
    "oauth_timestamp=\"" + ((DateTime.UtcNow.Ticks - new DateTime(1970, 1, 1).Ticks)/(1000 * 10000)).ToString() + "\"," + 
    "oauth_token=\"" + accessToken.TokenValue + "\"," + 
    "oauth_version=\"1.0" + "\"," + 
    "oauth_signature=\"" + ConfigurationManager.AppSettings["yahoo_oauth_signature"] + "%26" + "\"" 
); 
StreamReader streamReader = new StreamReader(request.GetResponse().GetResponseStream(), true); 

E quando faccio un passo nel codice ogni volta che vedo tutte le informazioni è lì che le richieste di Yahoo di avere nell'intestazione, eppure ogni volta ottengo questo 401.

risposta

1

Ok prima di tutto:

http://www.youtube.com/watch?v=lZLP0siJI-8&feature=related

secondo luogo, la soluzione;

non eseguirlo da localhost: P

Quando ho firmato su Yahoo avrei dovuto leggere con più attenzione, ho firmato una seconda volta solo per vedere, ed afferma chiaramente da quale dominio si vuole effettuare le chiamate alle nostre API.

+1

per scopi di sviluppo, test e debug è necessario eseguire da localhost. C'è un modo per farlo. È possibile modificare il file C: \ Windows \ System32 \ drivers \ etc \ hosts in modo che punti 127.0.0.1 a www.YOUR-DOMAIN.com. È possibile sostituire C: \ con qualsiasi partizione che ospita il proprio sistema operativo Windows. Sono sicuro che OS non Windows deve avere un modo alternativo per fare la stessa cosa. –

2

Come sono sicuro, 401 significa non autorizzato. Probabilmente significa che la tua firma non è valida.

Non si pubblica tutto il codice ma non riesco a vedere come potrebbe generare correttamente la firma corretta, dal momento che il metodo di firma sembra non prendere alcun parametro, in particolare il timestamp e il nonce. - come input. Se hai già calcolato correttamente la firma, devi utilizzare lo stesso timestamp e nonce nell'intestazione Autorizzata; l'utilizzo di uno diverso significherà che la firma non è valida.

1

stavo correndo nella stessa cosa ... devi leggere attentamente le specifiche:

http://developer.yahoo.com/oauth/guide/oauth-requesttoken.html

seguire attentamente le istruzioni per ogni campo. Ad esempio, non vedo che tu abbia specificato oauth_callback = "oob". Mi mancava anche quel campo, non appena l'ho specificato, ho ricevuto il token.

+1

Oh, e localhost non * importa *. – djunod

0

Sto rispondendo con la speranza che possa aiutare qualcun altro.

Yahoo! memorizza il dominio in lettere minuscole e stavo memorizzando il dominio in lettere maiuscole nella variabile di callback.

Quindi ho convertito il dominio in minuscolo e l'ho aggiunto con "www". che mi ha portato a risolvere il problema. Prova a colpire Yahoo! server con l'URL OAUTH finale da qualsiasi browser per visualizzare il messaggio di errore effettivo. All'interno dell'app dice solo "non autorizzato".