Twitter、tumblr などのさまざまなネットワークからコンテンツを取得する Web アプリケーションを作成しています。次のコードを見てください。
User.prototype.tumblr_authenticate_url = function(callback) {
var oauth = {
consumer_key: config.tumblr.tumblr_consumer_key,
consumer_secret: config.tumblr.tumblr_consumer_secret
};
request.post({url:'http://www.tumblr.com/oauth/request_token', oauth:oauth}, function (e, r, body) {
if(e)
return callback(e);
var access_token = qs.parse(body);
if(!access_token || typeof(access_token.oauth_token) == 'undefined' || typeof(access_token.oauth_token_secret) == 'undefined')
return callback(1);
return callback(null,{
url : 'http://www.tumblr.com/oauth/authorize?oauth_token=' + access_token.oauth_token,
oauth_token : access_token.oauth_token,
oauth_token_secret : access_token.oauth_token_secret});
});
};
User.prototype.tumblr_access_token = function(token,verifier,callback) {
var _oauth = {
consumer_key: config.tumblr.tumblr_consumer_key,
consumer_secret: config.tumblr.tumblr_consumer_secret
};
_oauth.token = token;
_oauth.verifier = verifier;
request.post({url:'http://www.tumblr.com/oauth/access_token', oauth:_oauth}, function (e, r, body) {
if(e)
return callback(e);
var user_details = qs.parse(body);
console.log(body);
if(!user_details || typeof(user_details.oauth_token)=='undefined' || typeof(user_details.oauth_token_secret)=='undefined' )
return callback(1);
return callback(null,{
oauth_token : user_details.oauth_token,
oauth_token_secret : user_details.oauth_token_secret});
});
};
これで、tumblr_authenticate url 部分が完全に機能します。リクエスト トークンが正常にフェッチされ、適切な認証ページが表示されます。ただし、リダイレクトされた URL からパラメーターをコピーして、tumblr_access_token 関数で試してみると、
oauth_signature [xxxx] does not match expected value [yyy]
応答本文で。
私はまったく同じコードを twitter に使用していますが、これは完全に機能します。コードに何か問題があるのか 、それとも tumblr oauth の動作が少し異なり、パラメータを別の方法で受け入れるのではないかと考えています。私が調べたところ、twitter と tumblr は同じ署名アルゴリズム HMAC-SHA1 を使用しています。