我正在编写一个MVC4 Web应用程序,它必须查询Twitter Version 1.1 API。内置于MVC4中,当我在 AuthConfig.cs 中激活 OAuthWebSecurity.RegisterTwitterClient 时,我可以使用“使用Twitter登录”功能。然后,这会对Twitter登录进行身份验证,但我想要做的是授权用户,以便我可以代表用户进行API v1.1调用。
我在Stack Overflow上找到了this post,它使用自定义类来解决不同的问题(force_login参数问题),但我已经使用了这些类并将 UserAuthorizationEndpoint 更改为指向的OAuth /授权即可。我更改了这行代码:
UserAuthorizationEndpoint = new MessageReceivingEndpoint("https://api.twitter.com/oauth/authenticate", HttpDeliveryMethods.GetRequest | HttpDeliveryMethods.AuthorizationHeaderRequest),
到此:
UserAuthorizationEndpoint = new MessageReceivingEndpoint("https://api.twitter.com/oauth/authorize", HttpDeliveryMethods.GetRequest | HttpDeliveryMethods.AuthorizationHeaderRequest),
它适用于授权,这意味着现在我的应用程序授权Twitter用户。但是,当我调用API v1.1时,我收到'(401)Unauthorized'错误。这是我用于通话的代码:
var var1 = WebWorker.PrepareAuthorizedRequest(new MessageReceivingEndpoint("https://api.twitter.com/1.1/followers/ids.json?cursor=-1&screen_name=sitestreams", HttpDeliveryMethods.GetRequest), accessToken);
var var2 = var1.GetResponse();
我认为我还需要 oauth_token_secret 才能获得授权的电话。 DotNetOpenAuth可以给我 oauth_token_secret 吗?我可以再用吗 WebWorker.PrepareAuthorizedRequest 还发送 oauth_token_secret ?
我还在Stack Overflow上找到了this post,它说我不能使用DotNetOpenAuth。但是,DotNetOpenAuth代码已经更新了,我想知道它现在是否适合我想要做的事情,这本质上是一件非常简单的事情:允许用户使用Twitter登录我的Web应用程序,然后允许我的网络应用程序,以查看用户的关注者。
所以归结为:我可以在MVC4中使用 DotNetOpenAuth 来授权用户,然后代表用户调用Twitter API v1.1,例如 GET粉丝/ IDS 。如果可能,我该怎么做?
答案 0 :(得分:2)
是的,DotNetOpenAuth绝对可以用于此。您可以下载包含OAuthConsumer项目的DotNetOpenAuth samples,其中包含一个Twitter.aspx页面,该页面显示了如何执行此操作。是的,它是Web表单而不是MVC,但翻译并不难。
您遇到问题的原因是因为您尝试在DotNetOpenAuth.AspNet
命名空间中使用Microsoft提供的类,这些类是专门为身份验证而非授权而设计的。使用示例中的WebConsumer
/ TwitterConsumer
类可以让您按照自己的要求进行操作。