Аутентифицировать пользователя с помощью твиттера - PullRequest
8 голосов
/ 27 января 2011

Интересно, кто-нибудь знает рабочий пример входа в систему с помощью Twitter (OAuth) для .NET

Я сейчас использую этот http://www.voiceoftech.com/swhitley/?p=681

, но это работает, только если я установил URL обратного вызова на «oob», если я установил реальный URL обратного вызова, я получаю «401 не авторизован».

Спасибо!

Ответы [ 5 ]

5 голосов
/ 27 февраля 2011

Я написал для этого OAuth-менеджер, потому что существующие опции были слишком сложными.

OAuth с верификацией в .NET

Класс ориентирован на OAuth и специально работает с Twitter.Это не тот класс, который предоставляет массу методов для всей поверхности веб-API Twitter.Это просто OAuth.Если вы хотите обновить статус в Twitter, этот класс не предоставляет метод «UpdateStatus».Я подумал, что разработчикам приложений очень просто создать HTTP-сообщение, которое они хотят отправить.Другими словами, HTTP-сообщение является API.Но материал OAuth может быть немного сложнее, поэтому он заслуживает API, то есть класс OAuth.

Вот пример кода для запроса «токена запроса»:

var oauth = new OAuth.Manager();
oauth["consumer_key"] = MY_APP_SPECIFIC_CONSUMER_KEY;
oauth["consumer_secret"] = MY_APP_SPECIFIC_CONSUMER_SECRET;    
oauth.AcquireRequestToken(SERVICE_SPECIFIC_REQUEST_TOKEN_URL, "POST");

ЭТО ЭТО .В Твиттере URL-адрес службы для запроса токенов: «https://api.twitter.com/oauth/request_token".

. Получив токен запроса, вы открываете пользовательский интерфейс веб-браузера, в котором пользователь явно дает разрешение на ваше приложение,чтобы получить доступ к Twitter. Это нужно сделать один раз, при первом запуске приложения. Сделайте это во встроенном элементе управления WebBrowser с кодом, подобным следующему:

var url = SERVICE_SPECIFIC_AUTHORIZE_URL_STUB + oauth["token"];
webBrowser1.Url = new Uri(url);

Для Twitter, URL-адрес для этого: "https://api.twitter.com/oauth/authorize?oauth_token=" с добавленным символом oauth_token.

Возьмите булавку из пользовательского интерфейса веб-браузера с помощью некоторого просмотра экрана HTML.Затем запросите «токен доступа»:

oauth.AcquireAccessToken(URL_ACCESS_TOKEN,
                         "POST",
                         pin);

Для Twitter этот URL-адрес «https://api.twitter.com/oauth/access_token".

Вам не нужно явно обрабатывать токен доступа; OAuthManagerкласс поддерживает его для вас в состоянии. Но токен и секрет доступны в oauth["token"] и oauth["token_secret"], на случай, если вы захотите записать их в постоянное хранилище. Чтобы делать запросы с этим токеном доступа, сгенерируйте заголовок authz, подобный этому:

var authzHeader = oauth.GenerateAuthzHeader(url, "POST");

... где url - конечная точка ресурса. Для обновления статуса пользователя в Twitter это будет "http://api.twitter.com/1/statuses/update.xml?status=Hello".

Затем установите полученное значениевведите в заголовок HTTP имя с именем Авторизация и отправьте HTTP-запрос на URL.

В последующих запусках, когда у вас уже есть токен доступа и секрет, вы можете создать экземпляр OAuth.Manager следующим образом:

var oauth = new OAuth.Manager();
oauth["consumer_key"] = MY_APP_SPECIFIC_CONSUMER_KEY;
oauth["consumer_secret"] = MY_APP_SPECIFIC_CONSUMER_SECRET;
oauth["token"] = your_stored_access_token;
oauth["token_secret"] = your_stored_access_secret;

Затем просто сгенерируйте заголовок authz и сделайте ваши запросыкак описано выше.

Загрузка DLL
Просмотр Документации

2 голосов
/ 06 декабря 2012

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

Видео: http://www.youtube.com/watch?v=TGEA1sgMMqU

Учебник: http://www.markhagan.me/Samples/Grant-Access-And-Tweet-As-Twitter-User-ASPNet

Код (если вы не хотите покидать эту страницу):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using Twitterizer;

namespace PostFansTwitter
{
    public partial class twconnect : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            var oauth_consumer_key = "gjxG99ZA5jmJoB3FeXWJZA";
            var oauth_consumer_secret = "rsAAtEhVRrXUTNcwEecXqPyDHaOR4KjOuMkpb8g";

            if (Request["oauth_token"] == null)
            {
                OAuthTokenResponse reqToken = OAuthUtility.GetRequestToken(
                    oauth_consumer_key,
                    oauth_consumer_secret,
                    Request.Url.AbsoluteUri);

                Response.Redirect(string.Format("http://twitter.com/oauth/authorize?oauth_token={0}",
                    reqToken.Token));
            }
            else
            {
                string requestToken = Request["oauth_token"].ToString();
                string pin = Request["oauth_verifier"].ToString();

                var tokens = OAuthUtility.GetAccessToken(
                    oauth_consumer_key,
                    oauth_consumer_secret,
                    requestToken,
                    pin);

                OAuthTokens accesstoken = new OAuthTokens()
                {
                    AccessToken = tokens.Token,
                    AccessTokenSecret = tokens.TokenSecret,
                    ConsumerKey = oauth_consumer_key,
                    ConsumerSecret = oauth_consumer_secret
                };

                TwitterResponse<TwitterStatus> response = TwitterStatus.Update(
                    accesstoken,
                    "Testing!! It works (hopefully).");

                if (response.Result == RequestResult.Success)
                {
                    Response.Write("we did it!");
                }
                else
                {
                    Response.Write("it's all bad.");
                }
            }
        }
    }
}
2 голосов
/ 27 января 2011

Уже решил мою проблему с http://www.voiceoftech.com/swhitley/?p=681

Я сохранял свое приложение как "браузер", но поскольку я не указывал URL-адрес обратного вызова, при сохранении оно было преобразовано в "клиентское" приложение.

1 голос
/ 27 января 2011

Я разработал библиотеку C # для OAuth, которая очень проста в использовании и готова к работе.Проект с открытым исходным кодом, и я включил демонстрационное приложение, которое работает против 1. Google 2. Twitter 3. Yahoo 4. Vimeo

Конечно, любой другой поставщик OAuth подойдет.Вы можете найти статью и библиотеку здесь

Библиотека OAuth C #

1 голос
/ 27 января 2011

«DotNetOpenAuth» будет отличным помощником для вас. http://www.dotnetopenauth.net/

...