8

我想知道有人知道使用 Twitter (OAuth) for .NET 登录的工作示例

我目前正在使用这个http://www.voiceoftech.com/swhitley/?p=681

但它只有在我将回调 url 设置为“oob”时才有效,如果我设置了一个真正的回调 url,我会得到“401 未授权”。

谢谢!

4

5 回答 5

5

我为此编写了一个 OAuth 管理器,因为现有选项太复杂了。

OAuth 与 .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");

就是这样。在 Twitter 中,用于请求令牌的服务特定 URL 是“ https://api.twitter.com/oauth/request_token ”。

获得请求令牌后,您会弹出 Web 浏览器 UI,用户将在其中明确批准您的应用程序以访问 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 屏幕抓取,从 Web 浏览器 UI 中获取 pin。然后请求一个“访问令牌”:

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 ”。

然后将生成的字符串设置到名为Authorization的 HTTP Header中,并将 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
查看文档

于 2011-02-27T14:30:50.970 回答
2

我的谈话迟到了,但我为其他有同样任务的人创建了一个视频教程。和你一样,我在找出 401 错误时玩得很开心。

视频:http ://www.youtube.com/watch?v=TGEA1sgMMqU

教程:http ://www.markhagan.me/Samples/Grant-Access-And-Tw​​eet-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.");
                }
            }
        }
    }
}
于 2012-12-06T17:26:38.153 回答
2

已经用http://www.voiceoftech.com/swhitley/?p=681解决了我的问题

我将我的应用程序保存为“浏览器”,但由于我没有指定回调 url,它在保存时被转换为“客户端”应用程序。

于 2011-01-27T17:27:22.617 回答
1

我已经为 OAuth 开发了一个 C# 库,它非常易于使用和启动和运行。该项目是一个开源项目,我包含了一个演示应用程序,它适用于 1. Google 2. Twitter 3. Yahoo 4. Vimeo

当然,任何其他 OAuth 提供者也会这样做。你可以在这里找到文章和图书馆

OAuth C# 库

于 2011-01-27T19:56:02.507 回答
1

“DotNetOpenAuth”对你有很大帮助。http://www.dotnetopenauth.net/

于 2011-01-27T17:02:52.573 回答