2010-09-08 5 views
5

Мой код ниже возвращает 401 Несанкционированное ошибку каждый раз, когда в этом месте:401 Несанкционированное с помощью 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); 

И когда я шаг в код каждый раз я вижу всю информацию там, что Yahoo просит есть в заголовке, но каждый раз, когда я получаю это 401.

ответ

1

Ok первую очередь:

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

во-вторых, решение;

Не запускайте его с локального хоста: P

Когда я подписался на Yahoo Я должен был прочитать более внимательно, я подписал во второй раз просто увидеть, и это четко указано, из какого домена будет вам делать звонки в наши API.

+1

для разработки, тестирования и отладки, которые необходимо выполнить с локального хоста. Есть способ сделать это. Вы можете изменить файл C: \ Windows \ System32 \ drivers \ etc \ hosts в пункт 127.0.0.1 на www.YOUR-DOMAIN.com. Вы можете заменить C: \ на то, что когда-либо раздел размещал вашу ОС Windows. Я уверен, что не-ОС Windows должен иметь альтернативный способ сделать то же самое. –

2

Как я уверен, вы знаете, 401 означает, что не разрешено. Вероятно, это означает, что ваша подпись недействительна.

Вы не публикуете весь свой код, но я не вижу, как он может правильно сгенерировать правильную подпись, так как ваш метод подписи, похоже, не принимает ни одного из параметров - наиболее показательно, метка времени и nonce - - как вход. Если вы уже правильно рассчитали подпись, вам нужно использовать ту же метку времени и nonce в заголовке Authorized; использование другого означает, что подпись недопустима.

1

я бегу в то же самое ... Вы должны внимательно прочитать спецификации:

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

Тщательно следуйте инструкциям для каждого поля. Например, я не вижу, что вы указали oauth_callback = "oob". Мне тоже не хватало этой области, как только я ее уточнил, у меня появился токен.

+1

О, и localhost делает * нет * пункт. – djunod

0

Я отвечаю с надеждой, что это поможет кому-то еще.

Yahoo! Упрощенный расчет! сохраняет домен в нижнем регистре, и я хранили домен в смешанном случае в переменной обратного вызова.

Таким образом, я преобразовал домен во все строчные буквы и с префиксом "www." который заставил меня решить проблему. Попробуйте попасть в Yahoo! серверы с окончательным URL OAUTH из любого браузера, чтобы увидеть фактическое сообщение об ошибке. В приложении он просто говорит «несанкционированный».

Смежные вопросы