我成功地从home_timeline.json检索结果,但使用相同的oauth逻辑/users/show.json失败(users/lookup也是)。
{"errors":[{"code":32,"message":"Could not authenticate you."}]}
我正在向请求添加user_id,同时使用基本 url 进行签名。
请注意,home_timeline.json 需要用户上下文,而其他终结点不需要用户上下文,但不确定它是否相关。
应用程序是移动电话间隙(角度),并使用$cordovaOauth.twitter注册用户并检索oauth令牌。我已经使用邮递员进行了测试,同样的事情发生了。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();
有人知道我做错了什么吗?
查询参数必须包含在 OAuth 签名中。 此外,类型为application/x-www-form-urlencode的POST请求应包括签名中正文的参数。
有关详细信息,请参阅 https://dev.twitter.com/oauth/overview/creating-signatures