2011-01-27 73 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."); 
       } 
      } 
     } 
    } 
}