Pau*_*Dee 7 oauth node.js xauth instapaper
我今天大部分时间都在尝试实施Instapaper的XAuth API.我还没有得到一个oauth令牌.
我有什么想法我做错了吗?
我正在使用node.js和oauth模块.我的理解是我需要将用户名,密码,amd模式作为额外参数传递.而oauth模块应该处理所有的oauth参数.但事实并非如此.这是代码:
var OAuth = require('oauth').OAuth;
var oauth = new OAuth(
'',
'https://www.instapaper.com/api/1/oauth/access_token',
'CONSUMER_KEY',
'CONSUMER_SECRET',
'1.0',
null,
'HMAC-SHA1',
null
);
var extra = {
'x_auth_username': 'USERNAME',
'x_auth_password': 'PASSWORD',
'x_auth_mode': 'client_auth'
};
var hello = oauth._prepareParameters('', '', 'POST', 'https://www.instapaper.com/api/1/oauth/access_token', null);
var url = 'https://www.instapaper.com/api/1/oauth/access_token';
var f = true;
for (var i in hello) {
if (f) {
url += '?';
f = false;
} else {
url += '&';
}
url += hello[i][0] + '=' + hello[i][1];
}
console.log(url+'&x_auth_mode=client_auth&x_auth_username=&x_auth_password=')
oauth._performSecureRequest('', '', "POST", url+'&x_auth_mode=client_auth&x_auth_username=&x_auth_password=', null, null, null, function(error, data, response) {
console.log(error, data)
});
Run Code Online (Sandbox Code Playgroud)
它返回:
{ statusCode: 401,
data: 'oauth_signature [pWRf4W9k9nogID/O90Ng29bR2K0=] does not match expected value [eqJ8zD1bKeUa3InpDyegGDAbSnM=]' } 'oauth_signature [pWRf4W9k9nogID/O90Ng29bR2K0=] does not match expected value [eqJ8zD1bKeUa3InpDyegGDAbSnM=]'}
Run Code Online (Sandbox Code Playgroud)
所以我不确定这是oauth模块的错误,还是Instapaper的API在解析Authorization头文件时过于严格,但是我必须在逗号后面添加一个空格用于标题分隔符.无论如何,这似乎导致了所有问题(400个错误).
oauth目前将标题构建为:
oauth_consumer_key=SomeKey,oauth_consumer_secret=SomeSecret...
Run Code Online (Sandbox Code Playgroud)
需要
oauth_consumer_key=SomeKey, oauth_consumer_secret=SomeSecret...
Run Code Online (Sandbox Code Playgroud)
我修改了oauth.js文件以反映这一点.
https://github.com/ciaranj/node-oauth/blob/master/lib/oauth.js#L121
在逗号后面的行尾添加了一个空格
authHeader+= "" + this._encodeData(orderedParameters[i][0])+"=\""+ this._encodeData(orderedParameters[i][1])+"\", ";
Run Code Online (Sandbox Code Playgroud)
这是我的工作客户端示例:
var OAuth = require('oauth').OAuth;
var consumerKey = 'chill';
var consumerSecret = 'duck';
var oa = new OAuth(
null,
'https://www.instapaper.com/api/1/oauth/access_token',
consumerKey,
consumerSecret,
'1.0',
null,
'HMAC-SHA1'
);
var x_auth_params = {
'x_auth_mode': 'client_auth',
'x_auth_password': 'yourpass',
'x_auth_username': 'yourusername@whatever.com'
};
oa.getOAuthAccessToken(null, null, null, x_auth_params, function (err, token, tokenSecret, results) {
// CAN HAZ TOKENS!
console.log(token);
console.log(tokenSecret);
// ZOMG DATA!!!
oa.get("https://www.instapaper.com/api/1/bookmarks/list", token, tokenSecret, function (err, data, response) {
console.log(data);
});
});
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
1813 次 |
| 最近记录: |