2012-03-09 2 views
0

WPF 응용 프로그램에서 C# Twitterizer를 사용하여 Twitter에 사용자를 인증하므로 스트림에 트윗을 게시 할 수 있습니다. (하지만 API 자체에 대한 질문이므로 관련성이 없습니다.)Twitter API 안전 인증

새로운 로그인 인터페이스를 만들고 싶지 않아 WebBrowser 컨트롤에 포함 된 Twitter의 로그인 페이지를 사용하고 싶습니다. 트위터 은 사용자가 일반 FB 로그인 페이지에 로그인하고 액세스 토큰이 콜백 URL으로 다시 전송되는 페이스 북과 동일한 인증 스타일을 지원합니까? 또는 사용자 이름과 암호를에게 보내는 것이 Twitter에서 액세스 토큰을 얻는 유일한 방법입니까?

+0

굵은 글자를 약간 어둡게 표현할 수 있습니다.) – BoltClock

+0

죄송합니다. 질문의 핵심 사항이 강조 표시되면 아이디어를 빨리 얻는 것이 더 쉽다고 생각합니다. – Bassem

답변

0

예, Twitter는 Facebook과 동일한 인증 스타일 인 OAuth를 지원합니다. 페이스 북의 OAuth 2를 사용하고 트위터는 Spring.NET 사회 트위터에 봐의 OAuth 1.0a를

를 사용 : 당신이 뭘 하려는지 http://springframework.net/social-twitter/ 그것은을 위해 샘플을 제공합니다.

1

여기는 an Oauth 1.0a class이며 Twitter에서 작동하며 원하는 것을 허용합니다.

클래스 사용 방법을 보여주는 a simple example도 있습니다.

코드는 다음과 같습니다

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가 없으면 해당 양식이 열리고 트위터 인증 양식을 표시하는 내장 웹 브라우저가 호스팅됩니다. 캐시 된 데이터가있는 경우 해당 양식을 표시 할 필요가 없습니다.