Простой пример Asp.net и OAuth без существующей библиотеки - PullRequest
0 голосов
/ 21 декабря 2011

Я пытаюсь получить токен запроса от Twitter OAuth и всегда получаю ошибку сервера 401 при попытке получить ответ. Я не хочу использовать существующую библиотеку, потому что я пытаюсь выучить Oauth и, возможно, создать свою собственную библиотеку. Это мой простой код:

WebRequest request = WebRequest.Create("https://api.twitter.com/oauth/request_token");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";

StringBuilder sbParams = new StringBuilder();
sbParams.Append("OAuth ");
sbParams.AppendFormat("oauth_consumer_key={0},", "[COMSUMERKEY]");
sbParams.AppendFormat("oauth_signature_method={0},", "PLAINTEXT");
sbParams.AppendFormat("oauth_signature={0},", HttpUtility.UrlEncode("[COMSUMER_SECRET]&"));
sbParams.AppendFormat("oauth_timestamp={0},", ((int)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds).ToString());
sbParams.AppendFormat("oauth_nonce={0},", "asdfalkjpoijwpeonpoaisudfnpowieuyfpasosdfdn");
sbParams.AppendFormat("oauth_version={0},", "1.0");
sbParams.AppendFormat("oauth_callback={0}", HttpUtility.UrlEncode(Request.Url.ToString()));

request.Headers.Add("Authorization", sbParams.ToString());

// Get the response.
WebResponse response = request.GetResponse();

1 Ответ

1 голос
/ 22 декабря 2011

С http://oauth.net/core/1.0a/#http_codes Вы знаете эти

HTTP 401 Unauthorized
    Invalid Consumer Key
    Invalid / expired Token
    Invalid signature
    Invalid / **used nonce

Проблема "использованного одноразового номера" может быть проблемой.Вам нужно сгенерировать случайную строку.С http://oauth.net/core/1.0a/#nonce

Одноразовый номер - это случайная строка, уникально генерируемая для каждого запроса


На серьезное дело.Вы не должны передавать свой потребительский секрет, как только вы его получили!У многих библиотек OAuth есть

request_request_token(consumer_key,consumer_secret)

Несмотря на то, что consumer_secret никогда не передается .Используется на стороне клиента для проверки ответа сервера.(Аналогичная проверка происходит и на стороне сервера)

И вы не вводите любые статические значения для подписывания запросов.С http://oauth.net/core/1.0a/#signing_process

All Token requests and Protected Resources requests MUST be signed by the Consumer and verified by the Service Provider.

Итог: прочитайте статью http://oauth.net/core/1.0a/, чтобы увидеть, как работает протокол.И выберите практическую библиотеку OAuth, которая не абстрагирует слишком много деталей (библиотека oauth-php, которую я использовал, поставлялась с таблицами SQL, управляемыми хранилищами данных и памятью сеансов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...