Twitterizer:“无法使用oauth进行身份验证”
本文关键字:oauth 身份验证 无法使用 Twitterizer | 更新日期: 2023-09-27 18:05:25
我正在使用Twitterizer库将网站内的tweet发布到我的twitter帐户中。它在现场工作得很好,在我的本地服务器上运行(通过twitter应用程序与OAuth进行身份验证并发布tweet)。但是当我试图在生产服务器上发布tweet时,Twitterizer说:"Result = Unauthorized。ErrorMessage = 无法验证OAuth。"
我仔细检查了消费者密钥,也试图重置密钥并再次尝试-结果相同。
推特应用程序有读/写访问我的推特帐户,并没有被阻止。这个问题是在成功工作了大约一个月后突然出现的,当时推文大约每小时发布一次。
这里有什么问题?
似乎,其他人也面临着这个问题:https://dev.twitter.com/discussions/305
更新2 最后,我已经找到了导致问题出现的原因。生产服务器上的Web应用程序试图用140个字符(以String表示)更新状态。长度属性)。第一个字符是unicode字符'左到右标记' (U+200E)。所以,这个文本被传递给TwitterStatus.Update(…),没有任何改变。我调试了一些Twitterizer源代码,注意到oauth_signature(=hash)的计算不正确。Oauth_signature是从实际请求的另一个url生成的。我还没有明确这个错误发生的原因和时间,可能会在未来几天写更多的信息。
更新3 我试着用新版Twitterizer(2.3.3)发布同样的消息,没有出现错误。问题消失了。
这是我用来发布tweet的代码:
OAuthTokens tokens = new OAuthTokens();
tokens.AccessToken = ConfigurationManager.AppSettings["twitterAccessToken"];
tokens.AccessTokenSecret = ConfigurationManager.AppSettings["twitterAccessTokenSecret"];
tokens.ConsumerKey = ConfigurationManager.AppSettings["twitterAutoPosterConsumerKey"];
tokens.ConsumerSecret = ConfigurationManager.AppSettings["twitterAutoPosterConsumerSecret"];
string text = "Some text";
TwitterResponse<TwitterStatus> tweetResponse = TwitterStatus.Update(tokens, text);
if (tweetResponse.Result == RequestResult.Success)
{
// Tweet posted successfully!
_log.InfoFormat("Posted a tweet #{0}.", tweetResponse.ResponseObject.Id);
}
else
{
_log.ErrorFormat("Error occured while posting a tweet. Result = {0}. ErrorMessage = {1}",
tweetResponse.Result, tweetResponse.ErrorMessage);
}
请查看消息,如果消息中有撇号('),请将其替换为&#39;
请注意,&#39;
将计数为5个字符。
我认为撇号会影响发送到twitter的请求包,使twitter无法正确获取Token,所以我们会得到错误"Could not authenticate with OAuth"
我也遇到过同样的问题。PHP 5.3.1运行在我的本地服务器上,而PHP 4.3.2运行在我的生产服务器上。我使用OAuth库的谷歌代码从下面获得,
http://code.google.com/p/oauth/source/browse/svn % 2 fcode % 2 fjavascript。
我研究了PHP代理程序从浏览器上的javascript代码接收的OAuth头。在本地服务器上,它是
OAuth领域= " ",oauth_consumer_key ="XXX",oauth_token ="XXX",oauth_version = " 1.0 ", oauth_timestamp ="1314956434",oauth_nonce ="mF7Tof oauth_signature_method ="HMAC-SHA1 oauth_signature ="DbuaiDeMhMYNZ5BaQmOoFr % 2 frseq % 3 d"
而在我的生产服务器上,上面的所有双引号都被转义了,即''"'。因此,我使用str_replace函数将转义的双引号替换为未转义的双引号。然后它在我的生产服务器上工作得很好。原因是PHP 5.3.1和PHP 4.3.2处理双引号的方式不同。转义双引号导致错误"无法使用OAuth进行身份验证"。