Безопасная аутентификация Twitter API - PullRequest
0 голосов
/ 09 марта 2012

Я использую C # Twitterizer в приложении WPF для аутентификации пользователей в Twitter, чтобы я мог публиковать твиты в их ленте. (Но это не имеет значения, потому что вопрос касается самого API).

Я не хочу создавать новый интерфейс входа, я хочу использовать страницу входа Twitter, встроенную в элемент управления WebBrowser. Поддерживает ли Twitter тот же стиль аутентификации , что и в Facebook, когда пользователь входит на обычную страницу входа в FB, а маркер доступа отправляется обратно по URL-адресу обратного вызова ? Или отправка имени пользователя и пароля - единственный способ получить токен доступа (в Twitter)?!

Ответы [ 2 ]

1 голос
/ 22 апреля 2012

Вот класс Oauth 1.0a , который работает с Twitter и разрешает то, что вы хотите.

Также есть простой пример , который показывает, как использовать класс.

Код выглядит следующим образом:

OAuth.Manager oauth;
AuthSettings settings;
public void Foo()
{
    oauth = new OAuth.Manager();
    oauth["consumer_key"] = TWITTER_CONSUMER_KEY;
    oauth["consumer_secret"] = TWITTER_CONSUMER_SECRET;

    settings = AuthSettings.ReadFromStorage();
    if (VerifyAuthentication())
    {
        Tweet("Hello, World");
    }
}

private void Tweet(string message)
{
    var url = "http://api.twitter.com/1/statuses/update.xml?status=" + message;
    var authzHeader = oauth.GenerateAuthzHeader(url, "POST");
    var request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "POST";
    request.PreAuthenticate = true;
    request.AllowWriteStreamBuffering = true;
    request.Headers.Add("Authorization", authzHeader);
    using (var response = (HttpWebResponse)request.GetResponse())
    {
        if (response.StatusCode != HttpStatusCode.OK)
        {
            ...
        }
    }
}

private bool VerifyAuthentication()
{
    if (!settings.Completed)
    {
        var dlg = new TwitterAppApprovalForm(); // your form with an embedded webbrowser
        dlg.ShowDialog();
        if (dlg.DialogResult == DialogResult.OK)
        {
            settings.access_token = dlg.AccessToken;
            settings.token_secret = dlg.TokenSecret;
            settings.Save();
        }

        if (!settings.Completed)
        {
            MessageBox.Show("You must approve this app for use with Twitter\n" +
                            "before updating your status with it.\n\n",
                            "No Authorizaiton for TweetIt",
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Exclamation);
            return false;
        }
    }

    // apply stored information into the oauth manager
    oauth["token"]           = settings.access_token;
    oauth["token_secret"]    = settings.token_secret;

    return true;
}

TwitterAppApprovalForm является образцом и включен в пример.Если у вас нет кэшированных access_token и token-secret, то эта форма открывается, размещая встроенный веб-браузер, отображающий форму авторизации Twitter.Если у вас есть кэшированные данные, вам не нужно отображать эту форму.

0 голосов
/ 12 марта 2012

Да, Twitter поддерживает тот же стиль аутентификации, что и Facebook, который называется OAuth. Facebook использует OAuth 2, а Twitter использует OAuth 1.0a

Взгляните на социальный Twitter Spring.NET: http://springframework.net/social-twitter/ Он предоставляет образцы того, что вы пытаетесь сделать.

...