1

我正在使用 Node.js 开发一个项目,我们需要为客户提供安全授权,就 Facebook 和 Twitter 而言,我们必须使用他们的 API 验证令牌

我用谷歌搜索并找到了许多示例,但都使用第三方 API,即 Facebook、Twitter 等

但问题是我们必须发布自己的令牌,设备在与我们的 API 对话时将使用该令牌。是否有任何为 Node.js 实现的模块来验证和生成令牌?

4

6 回答 6

4

我不清楚您想要找到一个提供 OAuth2 客户端功能的节点模块(所有这些模块本质上都是第 3 方 API)是什么意思,该功能无需额外的服务器调用即可在 facebook 和 twitter 上工作。

不过话虽如此,您可能会看这些:

而且由于 Node.js 是 javascript,只要您模拟客户端 javascript 所期望的必要浏览器环境元素,您就可以封装为客户端浏览器编写的常规 javascript。

您的问题让我认为封装此处提供的 OAuth 库可能很有用:https ://github.com/andreassolberg/jso并将其汇总到 Node 模块中,这样您就可以拥有一个行为类似于浏览器的客户端一个 OAuth2 提供者,但来自 Node.js 内部。

所以这里是该项目的开始:

它在 github ( https://github.com/hoonto/node-jso ) 或

npm instal node-jso

由于我需要修补它进行本地存储和 xhr 的方式,因此它不太可能工作,但我认为修复它非常简单。

我提供了一些回调函数,所以你可以像这样使用它:

var jso = require("node-jso")('http://www.google.com');

jso.onlocation = function(location){
    //Handle location changes  
};
jso.onhash = function(hash){
    //Handle hash changes 
};
jso.onhref = function(href){
    //Handle href changes
};

jso.jso_configure({ 
    "facebook": {        
        client_id: "xxxxxxxxxx", 
        redirect_uri: "http://localhost/~andreas/jso/",   
        authorization: "https://www.facebook.com/dialog/oauth",  
        presenttoken: "qs"    
    }     
}); 

如果您愿意提供帮助,请随时提交拉取请求!

于 2013-07-05T19:03:07.073 回答
1

您在 hoonto 的帖子中看到的客户 ID 是您必须在 Facebook 网站上生成的客户 ID。这是您的应用程序的客户端 ID,而不是用户的客户端 ID。因此,您只需填写一次,没有 oAuth 模块将无法正常工作。

您需要为每个社交媒体(FB、TW 和 GP)创建一个应用程序。

例如,对于 Facebook,您可以使用应用页面获取此客户端 ID: https ://developers.facebook.com/apps

对于 Google Plus,您可以在控制台页面中生成客户端 ID:https ://code.google.com/apis/console/

于 2013-07-08T08:43:00.167 回答
1

这将验证令牌https://github.com/jaredhanson/passport-http-bearer并且有很多方法可以生成令牌(电子邮件+密码+盐的 md5)

于 2013-07-09T07:08:18.847 回答
1

我真的不明白你想要什么,但这是我现在使用的东西。

“护照JS”

它对我来说效果很好

于 2013-07-11T23:11:03.997 回答
1

如果我明白你的意思是什么,我的项目具有相同的功能。我的应用程序充当 Oauth2 提供者,但将授权委托给其他提供者。我的应用程序不支持范围,因为它需要额外的对话框,所以我还没有使用所有 oauth2 功能。但我计划在未来。我使用了这个模块:

  • 表示
  • 护照
  • oauth2orize
  • 护照-谷歌-oauth
  • 护照-vkontakte
  • 护照脸书

工作中的主要帮助是来自 oauth2orize 模块的示例。

于 2014-10-08T16:28:37.623 回答
0

您可以在没有任何额外模块的情况下执行简单的仅限 Twitter 应用程序的 OAuth2。

var https = require('https');
var querystring = require('querystring');

var postData = querystring.stringify({
  'grant_type' : 'client_credentials' 
})

var options = {
  hostname: 'api.twitter.com',
  path: '/oauth2/token',
  method: 'POST',
  headers: {
    'Authorization': 'Basic ' + new Buffer(
       process.env.CONSUMER_KEY + ":" + process.env.CONSUMER_SECRET
    ).toString('base64'),
    'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
    'Content-Length': postData.length
  } // headers
}

var req = https.request(options, function(res) {
  console.log("statusCode: ", res.statusCode);
  console.log("headers: ", res.headers);

  res.on('data', function(d) {
    process.stdout.write(d);
  });
});

req.on('error', function(e) {
  console.error(e);
});

req.write(postData);
req.end();

如果你把上面的代码放在 foo.js 中,那么你应该得到类似的东西:

$ node foo.js 
statusCode:  200
headers:  { 'cache-control': 'no-cache, no-store, must-revalidate, pre-check=0, post-check=0',
  connection: 'close',
  'content-disposition': 'attachment; filename=json.json',
  'content-length': '155',
  'content-type': 'application/json;charset=utf-8',
  date: 'Mon, 07 Sep 2015 03:50:59 GMT',
  expires: 'Tue, 31 Mar 1981 05:00:00 GMT',
  'last-modified': 'Mon, 07 Sep 2015 03:50:59 GMT',
  ml: 'S',
  pragma: 'no-cache',
  server: 'tsa_a',
  'set-cookie': [ 'guest_id=v1%3A144159785995688631; Domain=.twitter.com; Path=/; Expires=Wed, 06-Sep-2017 03:50:59 UTC' ],
  status: '200 OK',
  'strict-transport-security': 'max-age=631138519',
  'x-connection-hash': 'e3fa57b3959c2fdf39fdf4bdd5851b35',
  'x-content-type-options': 'nosniff',
  'x-frame-options': 'SAMEORIGIN',
  'x-response-time': '21',
  'x-transaction': '2296d03323316c3e',
  'x-tsa-request-body-time': '0',
  'x-twitter-response-tags': 'BouncerCompliant',
  'x-ua-compatible': 'IE=edge,chrome=1',
  'x-xss-protection': '1; mode=block' }
{"token_type":"bearer","access_token":"[YOUR ACCESS TOKEN HERE!!!]"}
于 2015-09-07T04:02:02.043 回答