我想知道有人知道使用 Twitter (OAuth) for .NET 登录的工作示例
我目前正在使用这个http://www.voiceoftech.com/swhitley/?p=681
但它只有在我将回调 url 设置为“oob”时才有效,如果我设置了一个真正的回调 url,我会得到“401 未授权”。
谢谢!
我想知道有人知道使用 Twitter (OAuth) for .NET 登录的工作示例
我目前正在使用这个http://www.voiceoftech.com/swhitley/?p=681
但它只有在我将回调 url 设置为“oob”时才有效,如果我设置了一个真正的回调 url,我会得到“401 未授权”。
谢谢!
我为此编写了一个 OAuth 管理器,因为现有选项太复杂了。
该课程侧重于 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 标头,并如上所述发出您的请求。
我的谈话迟到了,但我为其他有同样任务的人创建了一个视频教程。和你一样,我在找出 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.");
}
}
}
}
}
已经用http://www.voiceoftech.com/swhitley/?p=681解决了我的问题
我将我的应用程序保存为“浏览器”,但由于我没有指定回调 url,它在保存时被转换为“客户端”应用程序。
我已经为 OAuth 开发了一个 C# 库,它非常易于使用和启动和运行。该项目是一个开源项目,我包含了一个演示应用程序,它适用于 1. Google 2. Twitter 3. Yahoo 4. Vimeo
当然,任何其他 OAuth 提供者也会这样做。你可以在这里找到文章和图书馆
“DotNetOpenAuth”对你有很大帮助。http://www.dotnetopenauth.net/