2

我有一个 Web 应用程序,其中任何用户如果选择社交媒体自动化,如 twitter,他们点击 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 上提供的令牌和密码,一切正常,但如果我提供存储在数据库中的令牌和密码,它不会对用户进行身份验证。

4

1 回答 1

1

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

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

您的 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"]
            }
        };
于 2014-01-13T16:23:11.867 回答