我有一个网络应用程序,任何用户如果选择推特等社交媒体自动化,他们点击推特按钮并完成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网站上提供的令牌和秘密,一切正常,但如果我提供存储在数据库中的令牌和秘密,则不会对用户进行身份验证。
答案 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"]
}
};