我已成功从home_timeline.json检索结果,但使用相同的oauth逻辑/users/show.json失败(用户/查找)。
{"errors":[{"code":32,"message":"Could not authenticate you."}]}
我将user_id添加到请求中,同时使用基本网址进行签名。
请注意,home_timeline.json需要用户上下文,而其他端点不需要用户上下文,但不确定它是否相关。
应用程序是mobile phonegap(angular),并使用$ cordovaOauth.twitter注册用户并检索oauth令牌。 我使用Postman进行了测试,同样的事情发生了。 OAuth对home_timeline.json有效,但在尝试使用相同的逻辑并为users / show.json生成新的OAuth时,请求会因未经身份验证而失败。
此处生成签名的代码
function createTwitterSignature(method, url) {
var oauthObject = {
oauth_consumer_key: clientId,
oauth_nonce: $cordovaOauthUtility.createNonce(10),
oauth_signature_method: "HMAC-SHA1",
oauth_token: token.oauth_token,
oauth_timestamp: Math.round((new Date()).getTime() / 1000.0),
oauth_version: "1.0"
};
var signatureObj = $cordovaOauthUtility.createSignature(method, url,oauthObject, {},clientSecret, token.oauth_token_secret);
$http.defaults.headers.common.Authorization = signatureObj.authorization_header;
}
var url ='https://api.twitter.com/1.1/statuses/home_timeline.json';
//var url = 'https://api.twitter.com/1.1/users/show.json';
//var user_id = token.user_id;
createTwitterSignature('GET', url);
//return $resource(url+'?user_id='+user_id).query();
return $resource(url).query();
任何人都知道我做错了什么?
答案 0 :(得分:0)
查询参数必须包含在OAuth签名中。此外,类型application / x-www-form-urlencoded的POST请求应包括签名中正文的参数。
有关详细信息,请参阅https://dev.twitter.com/oauth/overview/creating-signatures