首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Instapaper & Javascript XAuth

Instapaper & Javascript XAuth
EN

Stack Overflow用户
提问于 2011-09-22 17:15:01
回答 2查看 2K关注 0票数 7

我今天大部分时间都在尝试实现Instapaper的XAuth API。我甚至还没能得到一个oauth令牌。

知道我做错了什么吗?

我正在使用node.js和oauth模块。这是我的理解,我需要传递用户名,密码,和模式作为额外的参数。oauth模块应该负责所有的oauth参数。但事实并非如此。下面是代码:

代码语言:javascript
复制
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)
});

它返回如下:

代码语言:javascript
复制
{ statusCode: 401,
  data: 'oauth_signature [pWRf4W9k9nogID/O90Ng29bR2K0=] does not match expected value [eqJ8zD1bKeUa3InpDyegGDAbSnM=]' } 'oauth_signature [pWRf4W9k9nogID/O90Ng29bR2K0=] does not match expected value [eqJ8zD1bKeUa3InpDyegGDAbSnM=]'}
EN

回答 2

Stack Overflow用户

发布于 2012-03-10 08:29:38

因此,我不确定这是oauth模块的错误,还是Instapaper的API在解析Authorization头时过于严格,但我不得不在标题分隔符的逗号后面添加一个空格。无论如何,这似乎导致了所有的问题(400个错误)。

oauth当前将标题构建为:

代码语言:javascript
复制
oauth_consumer_key=SomeKey,oauth_consumer_secret=SomeSecret...

需要

代码语言:javascript
复制
oauth_consumer_key=SomeKey, oauth_consumer_secret=SomeSecret...

我修改了oauth.js文件以反映这一点。https://github.com/ciaranj/node-oauth/blob/master/lib/oauth.js#L121

在逗号后面加上一行末尾的空格。

代码语言:javascript
复制
authHeader+= "" + this._encodeData(orderedParameters[i][0])+"=\""+ this._encodeData(orderedParameters[i][1])+"\", ";

这是我的工作客户端示例:

代码语言:javascript
复制
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);

  });

});

希望这能有所帮助!

票数 5
EN

Stack Overflow用户

发布于 2013-09-02 22:04:50

德里克的回答是正确的,因为缺少的空间是问题所在,但你不需要编辑oauth.js

创建OAuth客户端后,只需设置分隔符字符串:

代码语言:javascript
复制
var OAuth = require('oauth').OAuth;
var oa = new OAuth({...});
oa._oauthParameterSeperator = ', ';

(是的,"sepErator",模块代码中有一个错误)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7518795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档