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



我成功地从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

最新更新