2011-01-27 176 views

回答

1

我已經開發了一個用於OAuth的C#庫,它非常易於使用,並且可以使用並運行。該項目是一個開源項目,我已經包含了演示程序,對 1.谷歌 2. Twitter的 3.雅虎 4. Vimeo的

當然,任何其他的OAuth提供者將做的一樣好作品。你可以找到我寫這一個OAuth經理的文章和圖書館在這裏

OAuth C# Library

5

,因爲現有的選擇是太複雜了。

OAuth with Verification in .NET

類側重於OAuth的,並且與Twitter的具體工作。這不是一個爲Twitter的Web API的整個表面提供大量方法的類。它只是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"); 

THAT'S IT。在Twitter中,用於請求令牌的服務特定URL是「https://api.twitter.com/oauth/request_token」。

一旦獲得請求令牌,就會彈出Web瀏覽器UI,在該UI中用戶將顯式授予對您的應用程序的批准,以訪問Twitter。第一次運行應用程序時,您需要這樣做一次。這樣做是一個嵌入式web瀏覽器控件的代碼如下所示:

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屏幕抓取,從Web瀏覽器UI抓住引腳。然後,請一個 「訪問令牌」:

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
查看Documentation

2

我遲到了談話,但我已經創建了別人誰是有這個相同的任務的視頻教程。就像你一樣,我有很多的樂趣想弄清楚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."); 
       } 
      } 
     } 
    } 
}