LinqToTwitter多用户授权

时间:2014-01-13 14:54:50

标签: c# twitter linq-to-twitter

我有一个网络应用程序,任何用户如果选择推特等社交媒体自动化,他们点击推特按钮并完成oauth程序。 oauth进程是使用php完成的。

我将该特定用户的oauth令牌和oauth秘密存储在数据库中。

现在我有四个键:

ConsumerKey // common for all as it is the key of app in dev.twitter.com
ConsumerSecret // common for all as it is the secret of app in dev.twitter.com
OauthToken //store in database, which keeps on changing as other user activates the socia media
OauthTokenSecret //store in database, which keeps on changing

我已经应用了以下所有授权技术:

 var auth = new MvcAuthorizer
            {
                Credentials = new InMemoryCredentials
                {
                    ConsumerKey = "###################",
                    ConsumerSecret = "##################",
                    OAuthToken = token,
                    AccessToken = secret
                }
            };
            auth.Authorize(); 


 var auth = new SingleUserAuthorizer
            {
                Credentials = new InMemoryCredentials
                {
                    ConsumerKey = "###############",
                    ConsumerSecret = "#############################",
                    OAuthToken = token,
                    AccessToken = secret
                }
            };
            auth.Authorize();

问题是,如果我输入dev.twitter.com网站上提供的令牌和秘密,一切正常,但如果我提供存储在数据库中的令牌和秘密,则不会对用户进行身份验证。

1 个答案:

答案 0 :(得分:1)

在SingleUserAuthorizer上,不要调用Authorize。此外,只要您向所有授权人提供所有4个凭据,您就不需要调用Authoirize。 LINQ to Twitter将使用这些凭据来构建授权标头。

如果您只提供了ConsumerKey和ConsumerSecret,并且授权者类型不是SingleUserAuthorizer,那么您将调用authorize的情况。授权实现OAuth协议的一部分,该协议获取OAuthToken和AccessToken。

您的SingleUserAuthorizer语法应该有效,但这是另一种方法,可以将键与Twitter应用页面命名方式进行匹配:

        var auth = new SingleUserAuthorizer
        {
            Credentials = new SingleUserInMemoryCredentials
            {
                ConsumerKey = ConfigurationManager.AppSettings["twitterConsumerKey"],
                ConsumerSecret = ConfigurationManager.AppSettings["twitterConsumerSecret"],
                TwitterAccessToken = ConfigurationManager.AppSettings["twitterAccessToken"],
                TwitterAccessTokenSecret = ConfigurationManager.AppSettings["twitterAccessTokenSecret"]
            }
        };