0

リクエスト トークンを取得しようとすると、「oauth 署名とトークンを検証できません」という本文のレスポンスが返されます。

すべてのリクエスト パラメータを設定するために使用しているコードを次に示します。たくさんのアスタリスクで問題になる可能性があると思われるいくつかの興味深い場所に注目しました.

var appId = "myId"
  , appSecret = "mySecret"
  , redirectUrl = "http://localhost:8077/twitterLogin";

var d = new Date();
  , time = Math.floor(d.getTime() / 1000); //seconds since epoch

var oauth_nonce = Math.random() * 1000000; //************could be the issue, maybe?
  , oauth_callback = encodeURIComponent('http://localhost:8077/twitterLogin');

//****************more likely the issue
var paramString = encodeURIComponent('oauth_consumer_key=**MY_APP_ID**&oauth_callback='+ oauth_callback 
                                      + '&oauth_nonce=' + oauth_nonce 
                                      + '&oauth_signature_method=HMAC-SHA1&oauth_timestamp=' + time 
                                      + '&=oauth_version=1.0');
var baseString = "POST&" + encodeURIComponent("https://api.twitter.com/oauth/request_token") + '&' + paramString; 

var signingKey = encodeURIComponent(appSecret) + '&' + encodeURIComponent(appSecret);
  , signature = crypto.createHmac('sha1', signingKey).update(baseString).digest('hex');

リクエスト自体のコードは次のとおりです。

var requestBody = "oauth_callback="+ oauth_callback 
                + "&appId=" + appId
                + "&oauth_nonce=" + oauth_nonce 
                + "&oauth_signature=" + signature 
                + "&oauth_signature_method=HMAC-SHA1"
                + "&oauth_timestamp=" + time
                + "&oauth_version=1.0";
//*******also could be the issue. maybe missing headers or something?
request.post({url: 'https://api.twitter.com/oauth/request_token', body: requestBody}); 

署名またはトークンで何が欠けているのか疑問に思っています..

4

1 に答える 1

1
  • まず、パラメーターをエンコードする前に辞書順 (アルファベット順) に並べ替える必要があります。oauth_callback と oauth_consumer_key の位置を切り替える必要があります。

  • 次に、承認されていないリクエスト トークンの場合、「&」文字を追加したコンシューマ シークレットを使用して署名キーを計算します。アンパサンドの後にもう一度シークレットを追加しました。

  • 3 番目に、リクエスト本文で、パラメーターの名前として appId の代わりに oauth_consumer を使用する必要があります。

それらの修正を試して、それが機能するかどうかを確認してください。

于 2013-06-07T10:00:05.877 に答える