【问题标题】:Twitterizer: "Could not authenticate with OAuth"Twitterizer:“无法使用 OAuth 进行身份验证”
【发布时间】:2011-10-26 16:54:40
【问题描述】:

我正在使用Twitterizer 库将网站内的推文发布到我的推特帐户中。它在现场运行良好,在我的 local 服务器上运行(通过 twitter 应用程序使用 OAuth 进行身份验证并发布推文)。 但是当我尝试在 production 服务器上发布推文时,Twitterizer 说:“Result = Unauthorized。ErrorMessage = 无法通过 OAuth 进行身份验证 。”

我仔细检查了消费者密钥,还尝试重置密钥并重试 - 结果相同。

Twitter 应用程序对我的 Twitter 帐户具有读/写权限,并且未被阻止。 这个问题是在成功工作了大约一个月后突然出现的,当时每隔一小时左右就会发布一次推文。

这里有什么问题?

更新 看来,其他人也面临这个问题:https://dev.twitter.com/discussions/305

更新 2 最后,我找出了导致问题出现的原因。生产服务器上的 Web 应用程序尝试使用 140 个字符更新状态(由 String.Length 属性测量)。第一个字符是 unicode Character 'LEFT-TO-RIGHT MARK' (U+200E)。因此,此文本被传递给 TwitterStatus.Update(..) 而不做任何更改。我调试了一点 Twitterizer 资源,发现 oauth_signature(=hash) 计算不正确。 oauth_signature 是从实际请求的另一个 url 生成的。我还没有弄清楚这个错误发生的原因和时间,可能会在接下来的几天里写更多的信息。

更新 3 我尝试使用新版本的 Twitterizer (2.3.3) 发布相同的消息,但没有发生错误。问题消失了。

这是我用来发布推文的代码:

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);
}

【问题讨论】:

  • 下课后我想和你谈谈。
  • 我已经给您在 twitterizer.net 上的电子邮件地址写了一封信
  • @RickySmith 我现在也有同样的问题 - 我该怎么做才能解决它?谢谢,
  • 我用有问题的消息测试了新版本的 Twitterizer (2.3.3),一切正常。因此,请尝试更新您的 Twitterizer 库。

标签: c# .net twitter twitter-oauth twitterizer


【解决方案1】:

请查看留言,如果留言有撇号('),请替换为&amp;amp;#39;

请注意,&amp;amp;#39; 将计为 5 个字符。

我认为撇号会影响发送到 twitter 的请求包,导致 twitter 无法正确获取 Token,因此我们会收到错误“无法使用 OAuth 进行身份验证”。

【讨论】:

    【解决方案2】:

    我也遇到了同样的问题。 PHP 5.3.1 在我的本地服务器上运行,而 PHP 4.3.2 在我的生产服务器上运行。我使用从下面获得的 Google 代码的 OAuth 库,

    http://code.google.com/p/oauth/source/browse/#svn%2Fcode%2Fjavascript.

    我探索了 PHP 代理程序从浏览器上的 javascript 代码接收到的 OAuth 标头。在我的本地服务器上,它是

    OAuth realm="",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%2FRsEQ%3D"

    在我的生产服务器上,上面所有的双引号都被转义了,即'\"'。 因此,我使用 str_replace 函数将转义的双引号替换为未转义的双引号。然后它在我的生产服务器上运行良好。原因是 PHP 5.3.1 和 PHP 4.3.2 处理双引号的方式不同。转义的双引号导致错误“无法使用 OAuth 进行身份验证”。

    【讨论】:

    • 我的网站在 ASP.NET MVC 2 上运行,所以我没有遇到这个问题。无论如何,您的经验可以对其他人有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多