Twitter OAuth 1.1 show.json失败,而home_timeline.json成功

时间:2016-03-15 07:10:44

标签: cordova twitter oauth

我已成功从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();

任何人都知道我做错了什么?

1 个答案:

答案 0 :(得分:0)

查询参数必须包含在OAuth签名中。此外,类型application / x-www-form-urlencoded的POST请求应包括签名中正文的参数。

有关详细信息,请参阅https://dev.twitter.com/oauth/overview/creating-signatures