2010-09-08 19 views
5

Mon code ci-dessous renvoie une erreur 401 non autorisée chaque fois au ce point:401 non autorisé en utilisant 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); 

Et quand je fais un pas dans le chaque code que je vois toutes les informations est là que les demandes de Yahoo d'avoir dans l'en-tête, mais chaque fois que je reçois ce 401.

Répondre

1

Ok d'abord:

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

en second lieu, la solution;

Ne pas l'exécuter à partir localhost: P

Lorsque je me suis inscrit sur Yahoo j'ai lu plus attentivement, je me suis inscrit une seconde fois juste pour voir, et il indique clairement quel domaine allez-vous faire les appels à nos API.

+1

Pour le développement, les tests et le débogage, vous devez exécuter localhost. Il y a une façon de faire cela. Vous pouvez modifier le fichier C: \ Windows \ System32 \ drivers \ etc \ hosts au point 127.0.0.1 à www.YOUR-DOMAIN.com. Vous pouvez remplacer C: \ par n'importe quelle partition hébergeant votre système d'exploitation Windows. Je suis sûr que les systèmes d'exploitation autres que Windows doivent avoir un autre moyen de faire la même chose. –

2

Comme je suis sûr que vous le savez, 401 signifie pas autorisé. Cela signifie probablement que votre signature n'est pas valide.

Vous ne publiez pas tout votre code mais je ne vois pas comment il pourrait générer correctement la bonne signature, puisque votre méthode de signature ne semble prendre aucun des paramètres - plus particulièrement l'horodatage et le nonce - - en entrée. Si vous avez déjà calculé correctement la signature, vous devez utiliser le même horodatage et le même attribut dans l'en-tête Autorisé; en utiliser un autre signifiera que la signature n'est pas valide.

1

je courais dans la même chose ... vous devez lire attentivement les spécifications:

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

suivre attentivement les instructions pour chaque champ. Par exemple, je ne vois pas que vous avez spécifié oauth_callback = "oob". Il me manquait aussi ce champ, dès que je l'ai spécifié, j'ai obtenu le jeton.

+1

Oh, et localhost ne compte * pas *. – djunod

0

Je réponds avec espoir que cela aidera quelqu'un d'autre.

Yahoo! stocke le domaine en minuscules et je stocke le domaine dans un cas mélangé dans la variable de rappel. J'ai donc converti le domaine en minuscules et l'ai préfixé avec "www." ce qui m'a permis de résoudre le problème. Essayez de frapper le Yahoo! serveurs avec l'URL finale OAUTH de n'importe quel navigateur pour voir le message d'erreur réel. Dans l'application, il dit juste "non autorisé".