我尝试使用JavaScript实现OAuth,但是当我向http://api.twitter.com/oauth/request_token发出请求时,我在响应中收到了上述消息(“未能验证oauth签名和令牌”)。
据我所知,我在编码签名库时都包含了所有正确的参数:
basestring :(为了安全起见,删除了用户密钥)
POST&安培; HTTP%3A%2F%2Ftwitter.com%2Foauth%2Frequest_token%26oauth_callback %3Doob%26oauth_consumer_key %3D11111111111111111111112222222222222%26oauth_nonce %3DO3cHsSXrfnzT%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp %3D1275928008%26oauth_version%3D1.0
消费者秘密:(为安全而删除)
11111111111111111111112222222222222&安培;
签名:
R3eHMuQ04F37 + xPJSIsoo0aMzc8
发布数据:(为了安全而删除了用户密钥)
oauth_callback = oob& oauth_consumer_key = 11111111111111111111112222222222222& oauth_signature_method = HMAC-SHA1& oauth_signature = pjDh8jkp89ThBtzzB9dQmxQfcg& oauth_timestamp = 1275928413& oauth_nonce = qyq3Jhn8rtTZ& oauth_version = 1.0
我已经检查过我的设备上的时钟是正确的,因为这是我能找到的唯一真正的结果:( nonce是唯一的并且每次运行时都会生成... 不幸的是我现在不知道在哪里看。我看不出任何明显的东西。我已经重写了整个请求两次 - 一次使用oauth.js库,一次完全手动,但在两种情况下它都会失败并出现相同的错误!
有什么建议吗?
干杯
答案 0 :(得分:0)
也许与this question相同 - 它链接到Twitter上的讨论:显然客户端javascript与oob是不允许的!?!?
答案 1 :(得分:0)
您的签名看起来不对,应始终以=结尾。以下是有效的示例:"" YEBbMFDYmp6DvZ3qW1aCx8q7kTc ="。你的基本字符串看起来正确,所以我认为你的签名密钥出错了。
在C#中,我是如何构建我的签名密钥的,
string signatureKey = Uri.EscapeDataString(consumer_secret)+"&";
var hmacsha1 = new HMACSHA1(new ASCIIEncoding()。GetBytes(signatureKey));
string signatureString = Convert.ToBase64String( hmacsha1.ComputeHash( new ASCIIEncoding()。GetBytes(signatureBaseString)));
string oauth_signature = signatureString;
有关此流程的更多信息:https://www.dinochiesa.net/?p=17