2010-09-08 8 views
5

Moje poniższy kod zwraca 401 error nieautoryzowanym za każdym razem w tym momencie:401 nieautoryzowanego korzystania 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); 

I kiedy wkroczyć w każdym razem kodu widzę wszystkie informacje tam jest, że wnioski Yahoo mieć w nagłówku, ale za każdym razem uzyskać to 401.

Odpowiedz

1

Ok przede wszystkim:

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

drugie rozwiązanie;

nie uruchomić go z localhost: P

Gdy zapisałam się na Yahoo powinno czytałem bardziej dokładnie, zapisałem się po raz drugi, po prostu zobaczyć, i to wyraźnie wskazuje, z którego będziesz domeną nawiązywać połączenia z naszymi interfejsami API.

+1

do celów programowania, testowania i debugowania wymagane jest uruchamianie z localhost. Jest na to sposób. Możesz zmodyfikować plik C: \ Windows \ System32 \ drivers \ etc \ hosts do punktu 127.0.0.1 na www.YOUR-DOMAIN.com. Możesz zastąpić C: \ tym, co kiedykolwiek partycja hostuje twój system operacyjny Windows. Jestem pewien, że system operacyjny inny niż Windows musi mieć alternatywny sposób na zrobienie tego samego. –

2

Jak jestem pewien, wiesz, 401 oznacza nieautoryzowane. Prawdopodobnie oznacza to, że twój podpis jest nieważny.

Nie publikujesz całego kodu, ale nie widzę, jak to możliwe, aby poprawnie wygenerować poprawny podpis, ponieważ twoja metoda podpisu zdaje się nie przyjmować żadnego z parametrów - najbardziej wymowny znacznik czasu i nonce - - jako wejście. Jeśli poprawnie obliczyłeś podpis, musisz użyć dokładnie tego samego znacznika czasu i numeru w nagłówku Authorized; użycie innego oznaczać będzie, że podpis jest nieważny.

1

biegałam do tej samej rzeczy ... trzeba uważnie czytać spec:

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

Ostrożnie postępuj zgodnie ze wskazówkami na każdym polu. Na przykład nie widzę, żebyś określił oauth_callback = "oob". Też brakowało mi tego pola, gdy tylko je podałem, dostałem token.

+1

Aha, a localhost nie * nie ma znaczenia. – djunod

0

Odpowiadam z nadzieją, że pomoże to komuś innemu.

Yahoo! przechowuje domenę małymi literami, a ja przechowywałam domenę w mieszanym przypadku w zmiennej wywołania zwrotnego.

Więc przekonwertowałem domenę na wszystkie małe litery i poprzedziłem ją "www." co skłoniło mnie do rozwiązania problemu. Postaraj się trafić w Yahoo! serwery z ostatecznym adresem URL OAUTH z dowolnej przeglądarki, aby zobaczyć faktyczny komunikat o błędzie. W aplikacji po prostu mówi "nieautoryzowane".

Powiązane problemy