401 Несанкционированное использование Yahoo OAuth - PullRequest
5 голосов
/ 08 сентября 2010

Мой код ниже возвращает 401 Несанкционированную ошибку каждый раз в этой точке:

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.

Ответы [ 4 ]

2 голосов
/ 20 ноября 2010

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

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

1 голос
/ 04 августа 2011

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

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

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

1 голос
/ 10 сентября 2010

Хорошо, во-первых:

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

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

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

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

0 голосов
/ 24 февраля 2013

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

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

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

...